简介
SpringMVC 文件上传有多种方式实现,这里介绍一种比较常见的方式,SpringBoot 也可采取此方式实现
实现步骤
- 首先将commons-fileupload-1.x.jar 和 commons-io-xx.jar 这两个包添加到项目
- 先看前端页面的配置,在form表单中添加 enctype=“multipart/form-data” 属性
<f:form method="post" action="add" modelAttribute="user" enctype="multipart/form-data">
<table>
<tr>
<td>Photo:</td>
<td><input type="file" name="attach"></td>
</tr>
</table>
</f:form>
- 在 spring-servlet.xml 配置文件中添加如下内容
<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的大小 5M -->
<property name="maxUploadSize" value="5000000" />
</bean>
注意:该 bean 的 id 不能命名为其它名字,只能为 multipartResolver
- 如下即为上传文件的关键代码,在方法中传入request是为了得到存储上传文件的文件夹的路径 MultipartFile attach 的几个主要方法
(1) getName(),得到页面input的name属性,例如这里是 name = “attach”
(2) getOriginalFilename(),得到被上传文件的文件名
(3) getContentType(),得到被上传文件的类型
@PostMapping("/add")
public String add(User user, MultipartFile attach, HttpServletRequest request) {
// 上传文件存储的目标文件夹
String realPath = request.getSession().getServletContext().getRealPath("/img");
// 要保存的文件对象
File targetFile = new File(realPath + "/" + attach.getOriginalFilename());
// 保存文件到目标文件夹
FileUtils.copyInputStreamToFile(attach.getInputStream(), targetFile);
}
注意:多文件上传的话,直接修改参数为数组类型即可:MultipartFile[] attchs;当然前端的参数也要修改为
<input type="file" name="attchs" multiple="multiple">