作者:ssslinppp
1. 摘要
前篇文章讲解了单文件上传《【Spring学习笔记-MVC-13】Spring MVC之文件上传》http://www.cnblogs.com/ssslinppp/p/4607043.html (请参考)。本文主要讲多文件上传的过程。
主要区别在于控制层代码不同,同时,jsp代码也有相应修改。
2. 添加jar包
- commons-fileupload-1.2.2.jar;
- commons-io-2.0.1.jar;
3. 配置CommonsMultipartResolver
说明:
- p:defaultEncoding="UTF-8":这里设置默认的文件编码为UTF-8,必须与用户JSP的默认编码一致;
- p:maxUploadSize="5000000":指定文件上传大小,单位为字节;
- p:uploadTempDir="upload/temp":文件上传临时目录,上传完成后,就会将临时文件删除;
说明:
- p:defaultEncoding="UTF-8":这里设置默认的文件编码为UTF-8,必须与用户JSP的默认编码一致;
- p:maxUploadSize="5000000":指定文件上传大小,单位为字节;
- p:uploadTempDir="upload/temp":文件上传临时目录,上传完成后,就会将临时文件删除;
4.控制层代码
@RequestMapping(value = "/upload")
public String updateThumb(HttpServletRequest request,
HttpServletResponse response, ModelMap mmMap)
throws IllegalStateException, IOException {
// 创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
//判断 request 是否有文件上传,即多部分请求
if(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
//取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
//取得上传文件
MultipartFile file = multiRequest.getFile(iter.next());
//对上传文件进行处理
if(!file.isEmpty()){
String path = request.getSession().getServletContext()
.getRealPath("upload");
String fileName = file.getOriginalFilename();
File targetFile = new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try {
file.transferTo(targetFile);
System.out.println("保存文件【"+file.getOriginalFilename()+"】完成...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return "success";
}