SpringMVC 为上传文件提供了良好的支持,SpringMVC 通过 MultipartResolver (Multipart 解析器) 处理的,它是一个接口,有两个实现类:
- CommonsMultipartResolver:依赖于 Apache 下的 jakarta Common FileUpload 项目解析 Multipart 请求,可以在 Spring 的各个版本中使用,只是它要依赖于第三方包才得以实现
- StandardServletMultipartResolver:Spring 3.1 版本后的产物,它依赖于 Servlet 3.0 或者更高版本的实现,它不用依赖第三包
前台页面
提交表单时,需要设置 enctype=“multipart/form-data” 多段式提交
<form class="form-horizontal form-border" action="/upload" method="post" id="form" enctype="multipart/form-data">
<div class="form-group">
<div class="col-sm-2"></div>
<div class="col-sm-8">
<input type="file" name="dropzFile"/>
</div>
</div>
</form>
SpringMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- 上传文件拦截,设置最大上传文件大小 10M = 10*1024*1024(B) = 10485760 bytes -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>
</beans>
后台代码
/**
* 文件上传
* @param dropzFile
* @return
*/
@RequestMapping(value = "upload",method = RequestMethod.POST)
public Map<String,Object> DropZone(MultipartFile dropzFile,HttpServletRequest request){
//获取文件名
String fileName = dropzFile.getOriginalFilename();
//获取文件后缀名
String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
//获取文件上传文件夹路径
String filePath = request.getSession().getServletContext().getRealPath(Const.UPLOAD_PATH);
//判断文件夹是否存在,不存在就创建文件夹
File file = new File(filePath);
if(! file.exists()){
file.mkdirs();
}
//UUID替换文件名
String filePrefix = UUID.randomUUID().toString();
file = new File(filePath,filePrefix+fileSuffix);
//上传文件
try {
dropzFile.transferTo(file);
} catch (IOException e) {
logger.error("文件上传出错!!!");
}
return "index";
}