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

网友投稿 308 2023-01-24


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

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

GIT地址: https://github.com/fengcharly/sockeio-springMvcUpload.git

部分代码如下:

服务端的代码:

ChuanServer:

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\http://Administrator\Desktop\upload\"

PortController:

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:

@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:

@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实现文件的上传下载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring boot按日切分spring boot的nohup.out日志文件的方法
下一篇:java生成图片进行套打功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~