这两天个人项目,需要上传文件功能,我后台使用的
SpringMVC
框架进行请求转发,在此整理下功能实现过程。
想要上传文件到后台,先要通过前台表单提交文件。
<form action="<%=request.getContextPath()%>/saveArticleToDB"
method="post" enctype="multipart/form-data" role="form">
<div class="form-group">
<label for="article_file">内容文件</label> <input type="file"
id="article_file" name="contentFile">
</div>
<div>
<input type="submit" class="btn btn-default" value="保存">
</div>
</form>
特别注意,在
form
标签中加上了enctype="multipart/form-data"
属性,设置这个属性,才可以向服务器上传文件。
如果不写这个属性,默认的传输格式是enctype="application/x-www-form-urlencoded"
。使用
SpringMVC
框架的一个好处是,我们提交表单,只要提交数据的标签name
属性对应上后台对应的实体类字段名,就可以直接在后台接受实体类,实体类中包含着提交的信息。
但是,如果现在提交表单,你会发现在后台的Controller
中接收的值全部是null,因为enctype="multipart/form-data"
改变了传输细节,后台接受自然也和默认时不同。
所以在请求转发配置文件中,需要配置
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>
这样SpringMVC
就可以正确映射表单数据到后台实体类了。
这还需要引入两个jar包commons-fileupload-1.3.1.jar
和commons-io-2.2.jar
,如果使用Maven
直接引入依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
- 表单的数据能正常接收了,还需要接收上传的文件。
在后台代码中,传入参数再加上MultipartFile
,这就是发送到服务器的文件,比如:
public ModelAndView articleList(MultipartFile contentFile, HttpServletRequest request,Article article) {}
其中MultipartFile
参数名称,也要和前台name
对应,这个类里有各种操作文件的方法,根据需要自行查询API即可。
如此就完成了上传文件到后台的功能。
<br /><br />