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

简介: SocketIo+SpringMvc实现文件的上传下载socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示:imageGIT地址: https://github.

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

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

img_ddd981374a8007744efedf3a99f9495c.gif
image

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\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缓冲流来传输文件,相对而言传输小文件比较合适,大文件比较慢,可以进一步优化,传输过程中传输速度如下:

img_900696dbb322ae6f8466d4dfbd33f463.gif
image
相关文章
SpringMVC解决下载文件名乱码的问题
SpringMVC解决下载文件名乱码的问题
109 0
|
6月前
SpringMVC之文件上传和下载
【1月更文挑战第20天】SpringMVC之文件上传和下载
45 1
|
前端开发 Java 数据库连接
SpringMvc第四战-【SpringMvc文件上传,下载】
SpringMvc第四战-【SpringMvc文件上传,下载】
|
设计模式 前端开发 Java
SpringMvc文件上传下载一条龙服务教会你
SpringMvc文件上传下载一条龙服务教会你
89 0
|
前端开发 Java 数据库
SpringMVC之文件的上传下载(教你如何使用有关SpringMVC知识实现文件上传下载的超详细博客)
SpringMVC之文件的上传下载(教你如何使用有关SpringMVC知识实现文件上传下载的超详细博客)
102 0
|
5月前
|
前端开发 Java Maven
如何在Spring MVC中实现图片的上传和下载功能
如何在Spring MVC中实现图片的上传和下载功能
|
6月前
|
存储 前端开发 Java
SpringMVC 文件上传和下载
SpringMVC 文件上传和下载
32 0
|
11月前
|
SQL JavaScript Java
SpringMVC之文件上传下载以及jrebel的使用
SpringMVC之文件上传下载以及jrebel的使用
57 0
|
SQL 缓存 前端开发
SpringMVC之文件上传下载以及jrebel的使用
SpringMVC之文件上传下载以及jrebel的使用
57 0
|
存储 前端开发 JavaScript
SpringMVC之文件上传下载
SpringMVC之文件上传下载
145 0