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\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实现文件的上传下载的更多相关文章

  1. Spring实现文件的上传下载

    背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...

  2. SSM框架之中如何进行文件的上传下载

    SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...

  3. 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载

    文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服务器计算机上. 然后,远程计算机可以使用 FTP ...

  4. 创建FTP的Site并用C#进行文件的上传下载

    创建FTP的Site并用C#进行文件的上传下载 文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服 ...

  5. linux链接及文件互相上传下载

    若排版紊乱可查看我的个人博客原文地址 基本操作 本篇博客主要介绍如何去链接远程的linux主机及如何实现本地与远程主机之间文件的上传下载操作,下面的linux系统是CentOS6.6 链接远程linu ...

  6. JAVAWEB之文件的上传下载

    文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...

  7. python使用ftplib模块实现FTP文件的上传下载

    python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def uplo ...

  8. php文件夹上传下载控件分享

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件 这里我先 ...

  9. 使用Fileupload完成文件的上传下载

    目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...

随机推荐

  1. POJ 3320 Jessica's Reading Problem (滑动窗口)

    题意:给定一个序列,求一个最短区间,使得这个区间包含所有的种类数. 析:最近刚做了几个滑动窗口的题,这个很明显也是,肯定不能暴力啊,时间承受不了啊,所以 我们使用滑动窗口来解决,要算出所有的种数,我用 ...

  2. arcgis api for flex 开发入门(一)环境搭建

    http://www.cnblogs.com/wenjl520/archive/2009/06/02/1494514.html arcgis api for flex 开发入门(一)环境搭建arcgi ...

  3. 个人项目:实现wc.exe(Java)

    本项目Github地址:https://github.com/NNewBoy/wc 项目相关要求 基本功能:(已实现) -c 统计文件字符数 -w 统计文件词的数目 -l 统计文件行数 扩展功能:(已 ...

  4. CSS选择器分类总结

    一.选择器语法及其意义(pattern and meaning) Pattern Meaning CSS level E an element of type E 标记选择器,匹配所有标签名为E的元素 ...

  5. ASP.NET MVC学习之模型验证详解

    ASP.NET MVC学习之模型验证篇 2014-05-28 11:36 by y-z-f, 6722 阅读, 13 评论, 收藏, 编辑 一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们 ...

  6. JSON 数据转成Table

    public static DataTable JsonToDataTable(string strJson) { //转换json格式 strJson = strJson.Replace(" ...

  7. wpf expender 展开动画

    非原创,网上下载的,觉得还可以,记录一下以便以后查看学习 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2 ...

  8. 在ASP.NET MVC中使用区域来方便管理controller和view

    在ASP.NET MVC中使用区域来方便管理controller和view 在mvc架构中,一般在controllers和views中写所有控制器和视图, 太多控制器时候,为了方便管理,想要将关于pe ...

  9. eclipse创建Maven工程没有Maven Dependencies

    记一次eclipse创建Maven工程没有Maven Dependencies的坑 Eclipse版本:luna版 maven用的3.5.0 配置本文不提. 这辆天用Eclipse创建maven工程 ...

  10. 记录FormsAuthentication的使用方法

    配置,配置mode="Forms",其他属性详见 MSDN(点我直接查看各authentication属性) . <configuration> <system. ...