SpringMVC上传文件的三种方式
发布日期:2021-10-02 10:57:23 浏览次数:28 分类:技术文章

本文共 3877 字,大约阅读时间需要 12 分钟。

前台代码:
<%@ 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>

springmvc-servlet.xml:

<!-- 支持多部分文件上传 -->
<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.通过流的方式上传文件
/*
     
* 通过流的方式上传文件
     
* @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"
    
}
2.采用file.Transto 来保存上传的文件
/*
     
* 采用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"
    
}
3.采用spring提供的上传文件的方法
/*
     
*采用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"
    
}
从测试结果可以看到:用springMVC自带的上传文件的方法要快的多!

转载地址:https://blog.csdn.net/JiangYunWen34/article/details/79139450 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SSM框架中注解含义及应用场景小结
下一篇:Eclipse各个版本及名称

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月11日 16时50分17秒