SpringMVC
SpringMVC中的文件上传
springMVC中上传文件的一个简单例子:
注意事项:
form表单中的enctype=multipart/form-data” 这个是上传文件必须的
springMVC配置文件中必须配置CommonsMultipartResolver。
1、准备:
SpringMVC-4.0.2.RELEASE
commons-fileupload-1.2.2
commons-io-1.3.2
pom.xml
<!-- 文件上传 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
springMVC
<!-- spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>
2、springMVC.xml中配置CommonsMultipartResolver
<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<!-- 指定所上传文件的总大小不能超过10M。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<property name="maxUploadSize" value="10240000"/>
</bean>
此处的这里是必须配置的。
3、前台form表单
<%-- 月评PPT 上传文件form --%>
<form id="uploadPPTFormId" role="form" enctype="multipart/form-data" method="post" action="/uploadPPT">
<%-- 文件域提交
属性 accept: 表示要上传的文件
application/vnd.ms-powerpoint:表示只能上传PPT文件格式
--%>
<input type="file" name="monthFile" id="uploadInput" accept="application/vnd.ms-powerpoint" />
<div id="fileUpLoadToolBar">
<button title="upload PPT" class="btn btn-default" type="submit" id="uploadFileBtn">
<span class="glyphicon glyphicon-saved" ></span>
<span class="uploadPPTfont" style="font-family: '华文行楷';">上传</span>
</button>
</div>
</form>
form表单中的enctype=multipart/form-data”是必须的。
4、后台controller
上传PPT
请求:/uploadPPT
请求方式:POST
上传的文件:monthFile
@RequestMapping(value="uploadPPT",method=RequestMethod.POST)
public String uploadPPTFile(@RequestParam MultipartFile monthFile,
HttpServletRequest request){
// 获取 将要存储的文件夹 全路径
String fileUrl = request.getSession().getServletContext().getRealPath("Files");
String fileName = null;
// 上传的文件
if (!monthFile.isEmpty()) {
// 获取 上传文件的名字
fileName = monthFile.getOriginalFilename();
}
if (!StringUtils.isEmpty(fileName)) {
File targetFile = new File(fileUrl,fileName);
// 如果文件不存在,则添加目录及文件
if (!targetFile.exists()) {
targetFile.mkdirs();
}
log.info("path: "+targetFile.getAbsolutePath());
try {
// 文件存储/转移
monthFile.transferTo(targetFile);
log.info("上传成功!");
} catch (Exception e) {
log.error("上传失败,发生异常! ", e);
}
}
return "success";
}
注意: 此处的 monthFile是单文件上传。
如果要使用多文件上传,则需要将接收参数改为数组形式:@RequestParam MultipartFile[],然后获取它的迭代器遍历等
主要是使用的commons-fileupload来实现的。