直接上代码吧,大伙一看便知

前台:

pageEncoding="utf-8"%>

Insert title here

采用流的方式上传文件

采用multipart提供的file.transfer方法上传文件

使用spring mvc提供的类的方法上传文件

配置:

后台:

方式一:

/*

* 通过流的方式上传文件

* @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象

*/

@RequestMapping("fileUpload")

public String fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {

//用来检测程序运行时间

long startTime=System.currentTimeMillis();

System.out.println("fileName:"+file.getOriginalFilename());

try {

//获取输出流

OutputStream os=new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());

//获取输入流 CommonsMultipartFile 中可以直接得到文件的流

InputStream is=file.getInputStream();

int temp;

//一个一个字节的读取并写入

while((temp=is.read())!=(-1))

{

os.write(temp);

}

os.flush();

os.close();

is.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

long endTime=System.currentTimeMillis();

System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");

return "/success";

}

方式二:

/*

* 采用file.Transto 来保存上传的文件

*/

@RequestMapping("fileUpload2")

public String fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {

long startTime=System.currentTimeMillis();

System.out.println("fileName:"+file.getOriginalFilename());

String path="E:/"+new Date().getTime()+file.getOriginalFilename();

File newFile=new File(path);

//通过CommonsMultipartFile的方法直接写文件(注意这个时候)

file.transferTo(newFile);

long endTime=System.currentTimeMillis();

System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");

return "/success";

}

方式三:

/*

*采用spring提供的上传文件的方法

*/

@RequestMapping("springUpload")

public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException

{

long startTime=System.currentTimeMillis();

//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)

CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(

request.getSession().getServletContext());

//检查form中是否有enctype="multipart/form-data"

if(multipartResolver.isMultipart(request))

{

//将request变成多部分request

MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;

//获取multiRequest 中所有的文件名

Iterator iter=multiRequest.getFileNames();

while(iter.hasNext())

{

//一次遍历所有文件

MultipartFile file=multiRequest.getFile(iter.next().toString());

if(file!=null)

{

String path="E:/springUpload"+file.getOriginalFilename();

//上传

file.transferTo(new File(path));

}

}

}

long endTime=System.currentTimeMillis();

System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");

return "/success";

}

我们看看测试上传的时间:

第一次我用一个4M的文件:

fileName:test.rar

方法一的运行时间:14712ms

fileName:test.rar

方法二的运行时间:5ms

方法三的运行时间:4ms

第二次:我用一个50M的文件

方式一进度很慢,估计得要个5分钟

方法二的运行时间:67ms

方法三的运行时间:80ms

从测试结果我们可以看到:用springMVC自带的上传文件的方法要快的多!

对于测试二的结果:可能是方法三得挨个搜索,所以要慢点。不过一般情况下我们是方法三,因为他能提供给我们更多的方法

java spring上传_SpringMVC上传文件的三种方式相关推荐

  1. django文件上传到服务器,django上传文件的三种方式

    Django文件上传需要考虑的重要事项 文件或图片一般通过表单进行.用户在前端点击文件上传,然后以POST方式将数据和文件提交到服务器.服务器在接收到POST请求后需要将其存储在服务器上的某个地方.D ...

  2. windows和虚拟机互传文件的三种方式

    大家好,在平时学习工作的时候可能有这样的需求:要将windows中的文件传到虚拟机中或者将虚拟机的文件传到windows,大家都是怎么实现的呢? 今天给大家介绍下windows和虚拟机互传文件的三种方 ...

  3. java oom dump_JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式

    JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式,以及如何使用Eclips Memory Analyzer(MAT)插件进行堆内存分析. 方法一: jmap -du ...

  4. Python处理mat文件的三种方式小结

    文章目录 处理mat文件的三种方式 scipy h5py mat73 python操作.mat文件 python读取.mat格式 mat转图片 处理mat文件的三种方式 读书的时候,处理数据都是采用m ...

  5. java解析遍历List集合(其实现子类)的三种方式

    java解析遍历List集合(其实现子类)的三种方式 1 使用迭代器对象 1.1 底层 1.1.1 List接口继承了Collection接口 1.1.2 而Collection接口又继承了Itera ...

  6. JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式

    JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式,以及如何使用Eclips Memory Analyzer(MAT)插件进行堆内存分析. 方法一: jmap -du ...

  7. 创建文件的三种方式和一些操作方法

    package IO;import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException;/*** @ ...

  8. ubuntu创建文件的三种方式

    ubuntu下创建文件的三种方式 1.touch命令:touch 文件名.后缀 在当前工作目录底下新建一个文件,如 touch velocity_publisher.cpp 2.gedit命令:ged ...

  9. ajax上传多文件和数据,Ajax上传数据和上传文件(三种方式)

    Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式) Title .btn { background-color: co ...

  10. ios 应用和电脑共享文件夹_堪比AirDrop,苹果 iPhone与Windows电脑互传文件的三种方式...

    如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook.iPad 等设备之间快速传递照片.视频或文件. 遗憾的是 ...

最新文章

  1. Virtex-6中的GTX模块、GTH模块
  2. 卢京潮自动控制原理ppt_视觉定位系统在贴片机中的使用与原理作用
  3. 20172307 2018-2019-1 《程序设计与数据结构》实验3报告
  4. 圆桌的项目Alpha冲刺——测试
  5. std::chrono时间库详解
  6. linux挂载多个目录下,linux – 如何在centos上使用nfs4挂载多个文件夹?
  7. [vue] v-once的使用场景有哪些?
  8. ListString^^ 引用空间
  9. 寻找创业方向的3个方法
  10. TensorFlow2实现空间自适应归一化(Spatial Adaptive Normalization, SPADE)
  11. mongodb 导出txt_MongoDB导出软件
  12. tgp登录dnf一直显示连接服务器失败,DNF总网络连接失败是为什么?
  13. git基本命令、提交pr
  14. c语言百分号-5.2f什么意思,c语言中的%d跟%5.2f有什么区别
  15. Cypress自动化测试:type
  16. Android10 lowmemorykiller
  17. 使用极狐GitLab限制开发者使用CI/CD的权限,三种方案
  18. 某知名新媒体公司(北京/深圳/上海)
  19. 所谓的SaaS服务到底是什么?
  20. android layout_gravity gravity

热门文章

  1. 【UAV】陀螺仪数据分析,以维特智能 JY901B 为例
  2. 【控制】蚁群算法(ACO,Ant Colony Optimization)及 Matlab 实现
  3. 1.5 卷积步长-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. STM32 进阶教程 17 - ADC注入通道
  5. 三、开发调试应用程序
  6. SVN迁移历史日志记录笔记
  7. 透过 OKR 进行项目过程管理
  8. 微软称电脑系统识别能力已经超越了人类
  9. C++ 指针 vs 数组
  10. SwingC API 演示DEMO,不断更新