gpt4 book ai didi

SocketIo+SpringMvc实现文件的上传下载功能

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章SocketIo+SpringMvc实现文件的上传下载功能由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

socketio不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示

SocketIo+SpringMvc实现文件的上传下载功能

git地址: https://github.com/fengcharly/sockeio-springmvcupload.git 。

部分代码如下

服务端的代码

chuanserver

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.io.*;
import java.net.serversocket;
import java.net.socket;
import java.nio.channels.filechannel;
public class chuanserver {
  public static void protserver(string po) throws ioexception {
     int port = integer.parseint(po);
   serversocket serversocket = new serversocket(port);
   while ( true ) {
    final socket clientsocket = serversocket.accept();
    new thread() {
     @override
     public void run() {
      try {
       bufferedreader br = new bufferedreader(
         new inputstreamreader(clientsocket.getinputstream(), "gbk" )
       );
       inputstream is = clientsocket.getinputstream();
       printstream pr = new printstream(
         clientsocket.getoutputstream()
       );
       pr.println( "我是服务端" );
       string str = br.readline();
       system.out.println( "br.readline():" + str);
       system.out.println( "服务端来接收了!!" );
       out(is, str);
      } catch (exception e) {
       e.printstacktrace();
      }
     }
    }.start();
   }
  }
  public static void out(inputstream is, string str) throws ioexception {
   fileoutputstream fo = new fileoutputstream( "c:\\users\\administrator\\desktop\\upload\\" + str);
   bufferedinputstream bi = new bufferedinputstream(is);
   bufferedoutputstream bo = new bufferedoutputstream(fo);
   int len = 0 ;
   while ((len=bi.read())!=- 1 ){
    bo.write(len);
   }
   bi.close();
   bo.close();
  }
}

这里我固定了上传后保存的路径为:"c:\users\administrator\desktop\upload\" 。

portcontroller

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import org.springframework.stereotype.controller;
import org.springframework.ui.model;
import org.springframework.web.bind.annotation.requestmapping;
import socket.chuanserver;
import java.io.ioexception;
@controller
public class portcontroller {
  @requestmapping ( "/port" )
  public string port(string port,model model){
   model.addattribute( "port" ,port);
   try {
    chuanserver.protserver(port);
   } catch (ioexception e) {
    e.printstacktrace();
   }
   return "success" ;
  }
}

再来看下上传的客户端的代码

uploadcontroller

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@controller
@requestmapping ( "/" )
public class uploadcontroller {
  @autowired
  private upservice upservice;
  private string zhuan= "" ;
  @requestmapping ( "/upload" )
  public string upload( @requestparam (value = "file" , required = false ) multipartfile file,
        httpservletrequest request, @requestparam ( "iphost" ) string iphost, @requestparam ( "port" ) string port,model model) throws ioexception {
   string filename = file.getoriginalfilename();
   inputstream is = file.getinputstream();
   upservice.upload(filename,is,iphost,port);
   return "success" ;
  }
}

upserviceimpl

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@service
public class upserviceimpl implements upservice {
  @override
  public void upload(string filename, inputstream is, string iphost, string port) {
   getclientsocket(is, filename, iphost, port);
  }
//建立socket通信
  public void getclientsocket(inputstream is, string filename, string iphost, string port) {
   int po = integer.parseint(port);
   try {
    socket socket = new socket(iphost, po);
    bufferedreader br = new bufferedreader(
      new inputstreamreader(socket.getinputstream(), "utf-8" )
    );
    printstream pr = new printstream(
      socket.getoutputstream()
    );
    outputstream os = socket.getoutputstream();
    system.out.println( "客户端给你传文件了!" );
    system.out.println( "文件名为:" + filename);
    //读取服务器返回的消息
    string str = br.readline();
    system.out.println( "服务器发来的消息为:" + str);
    pr.println(filename);
    in(is, os);
    pr.close();
    br.close();
    system.out.println( "客户端已关闭" );
   } catch (exception e) {
    e.printstacktrace();
   }
  }
  //上传文本
  public static void in(inputstream is, outputstream os) throws ioexception {
   //bio
   bufferedinputstream bi = new bufferedinputstream(is);
   bufferedoutputstream bo = new bufferedoutputstream(os);
   int len = 0 ;
   while ((len=bi.read())!=- 1 ){
    bo.write(len);
    system.out.println(len);
   }
   bi.close();
   bo.close();
  }
}

这里相应的访问路径为

服务端: http://localhost:8080/ 。

客户端: http://localhost:8082/upload 。

完整项目git地址

注意: https://github.com/fengcharly/sockeio-springmvcupload.git 。

传输过程中的我们用的是系统提供的bufferedinputstream和bufferedoutputstream缓冲流来传输文件,相对而言传输小文件比较合适,大文件比较慢,可以进一步优化,传输过程中传输速度如下

SocketIo+SpringMvc实现文件的上传下载功能

总结 。

以上所述是小编给大家介绍的socketio+springmvc实现文件的上传下载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:https://www.cnblogs.com/charlypage/p/9440226.html 。

最后此篇关于SocketIo+SpringMvc实现文件的上传下载功能的文章就讲到这里了,如果你想了解更多关于SocketIo+SpringMvc实现文件的上传下载功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com