转帖地址:https://www.cnblogs.com/fjsnail/p/3491033.html
直接上代码吧,大伙一看便知
这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html
前台:
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
|
<%@ page language= "java" contentType= "text/html; charset=utf-8"
pageEncoding= "utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html> <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" >
<title>Insert title here</title> </head> <body> <form name= "serForm" action= "/SpringMVC006/fileUpload" method= "post" enctype= "multipart/form-data" >
<h1>采用流的方式上传文件</h1> <input type= "file" name= "file" >
<input type= "submit" value= "upload" />
</form> <form name= "Form2" action= "/SpringMVC006/fileUpload2" method= "post" enctype= "multipart/form-data" >
<h1>采用multipart提供的file.transfer方法上传文件</h1> <input type= "file" name= "file" >
<input type= "submit" value= "upload" />
</form> <form name= "Form2" action= "/SpringMVC006/springUpload" method= "post" enctype= "multipart/form-data" >
<h1>使用spring mvc提供的类的方法上传文件</h1> <input type= "file" name= "file" >
<input type= "submit" value= "upload" />
</form> </body> </html> |
配置:
1
2
3
4
5
6
|
<!-- 多部分文件上传 --> <bean id= "multipartResolver" class = "org.springframework.web.multipart.commons.CommonsMultipartResolver" >
<property name= "maxUploadSize" value= "104857600" />
<property name= "maxInMemorySize" value= "4096" />
<property name= "defaultEncoding" value= "UTF-8" ></property>
</bean> |
后台:
方式一:
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
|
/* * 通过流的方式上传文件
* @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" ;
}
|
方式二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* * 采用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" ;
}
|
方式三:
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
|
/* *采用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自带的上传文件的方法要快的多!
对于测试二的结果:可能是方法三得挨个搜索,所以要慢点。不过一般情况下我们是方法三,因为他能提供给我们更多的方法
相关推荐
springMVC 上传文件方式springMVC 上传文件方式springMVC 上传文件方式
在这个“SpringMVC文件上传,多文件上传实例”中,我们将深入探讨如何在SpringMVC环境中实现文件上传功能,包括单个文件上传以及多个文件的批量上传。 1. **文件上传原理**: 文件上传是通过HTTP协议的POST请求来...
springMvc 文件上传,springMvc 支持单文件和多文件上传,
在SpringMVC框架中,实现文件的上传与下载是常见的需求。IntelliJ IDEA作为流行的Java开发集成环境,为开发者提供了高效便捷的开发体验。在这个项目中,我们使用IDEA来构建一个基于SpringMVC的系统,实现了文件的...
在使用springMVC进行系统实现时,springMVC默认的解析器里面是没有加入对文件上传的解析的,这可以方便我们实现自己的文件上传。但如果你想使用springMVC对文件上传的解析器来处理文件上传的时候就需要在spring的...
本主题将深入探讨如何使用SpringMVC和SSH(Struts2 + Hibernate + Spring)框架来实现文件的上传与下载。 首先,我们来看SpringMVC中的文件上传。SpringMVC是Spring框架的一部分,它提供了强大的MVC设计模式支持,...
本文将详细讲解如何实现SpringMVC中的单文件上传、多文件上传、文件列表显示以及文件下载。 首先,我们需要理解SpringMVC处理文件上传的基本原理。在SpringMVC中,文件上传通常涉及到`CommonsMultipartResolver`...
SpringMVC 上传文件详解 SpringMVC 框架中上传文件是非常常见的操作,今天我们来详细讲解 SpringMVC 中的文件上传过程。 文件上传的必要条件 在 SpringMVC 中,文件上传需要满足以下几个条件: 1. 表单的 ...
springMVC上传文件的三种解析方式源码。可以添加到tomcat直接运行,运行访问地址为:http://localhost:8080/SpringMVCUploadFileDemo/upload/toUploadFileView1
基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于...
下面将详细阐述如何在SpringMVC中进行文件上传,并涵盖相关知识点。 1. **MultipartFile接口** SpringMVC提供了一个名为`MultipartFile`的接口,用于处理多部分表单数据中的文件部分。这个接口提供了获取文件名、...
在Web应用中,文件上传是一项常见的功能,SpringMVC作为Spring框架的一部分,提供了一种方便、灵活的方式来实现这个功能。本文将深入探讨如何利用SpringMVC实现基于Java的文件上传功能,以及在eclipse开发环境中,...
在JavaEE企业级开发中,SpringMVC框架是广泛用于构建Web应用程序的工具,它提供了丰富的功能,包括处理文件上传和下载。本实验报告将详细阐述如何利用SpringMVC实现文件上传与下载的功能。 首先,文件上传的核心...
在SpringMVC中实现文件上传是一项常见的任务,它允许用户通过表单将本地文件发送到服务器进行存储或处理。这个"SpringMVC文件上传Demo代码"是一个实例,演示了如何配置和使用SpringMVC来实现这一功能。 首先,我们...
`SpringMVC`作为Java后端的一个强大框架,提供了处理文件上传的能力。而`Ajax`技术则使得页面可以在不刷新的情况下与服务器进行交互,实现异步上传,极大地提升了用户体验。在本教程中,我们将探讨如何结合`...
在Spring MVC框架中,文件上传是一项常见的功能,用于允许用户通过Web应用程序上传文件。要实现这一功能,我们需要依赖一些特定的库和配置。本篇文章将详细介绍如何在Spring MVC中实现文件上传,并涉及到所需的jar包...
SpringMVC是Spring框架的一个模块,专门用于处理Web应用程序中的HTTP请求和响应。在实际开发中,文件上传功能是常见的需求,例如...通过学习和实践这个Demo,开发者可以快速掌握SpringMVC环境下文件上传的实现方式。
在Spring MVC框架中实现文件上传并提供进度条功能是一项实用且复杂的任务,涉及到前端与后端的交互以及数据传输过程的监控。以下是对这个主题的详细解析。 首先,我们需要理解Spring MVC的基本工作原理。Spring MVC...
在处理文件上传功能时,SpringMVC需要依赖一些特定的库,这些库通常是以jar(Java Archive)文件的形式存在的。在这个压缩包中包含的两个关键jar文件——`com.springsource.org.apache.commons.io-1.4.0.jar`和`...