目录
1. 导入文件上传的工具依赖
在web.xml中配置:
<!-- 文件上传工具-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2. 配置文件上传的解析器
在spring-mvc中配置:
<!-- 配置文件上传的解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置编码-->
<property name="defaultEncoding" value="UTF-8"/>
<!-- 设置上传最大的大小限制(单位kb)-->
<property name="maxUploadSize" value="100000000" />
</bean>
3. 编写测试
接下来两个例子来说明用法
3.1单文件上传
首先编写好表单如下:
<%--有文件上传时必须选择多部分表单形式——enctype--%>
<form action="${pageContext.request.contextPath}/user/quick14" method="post" enctype="multipart/form-data">
name:<input type="text" name="username"><br/>
file:<input type="file" name="upload"><br/>
<input type="submit" value="提交">
</form>
当要上传文件时,注意 enctype的设置,此时后台获取的方法:
@RequestMapping("/quick14")
@ResponseBody
public void save14(String username, MultipartFile upload) throws IOException {
System.out.println(username);
String filename=upload.getOriginalFilename();//获得源文件的完整名字,含后缀
upload.transferTo(new File("D:\\image\\" + filename));//将这个文件转存到另一个地方,这个地址是基于当前主机的绝对地址,记住最后要加\\
}
首先我们接收String参数很简单形参和表单name匹配即可,然后我们的file数据在springmmvc里也设置了一个对象即 MultipartFile,然后形参与表单那么匹配即可
然后我们需要得到这个源文件的名字——getOriginalFilename(),通过这个方法即可,
然后就是通过——transferTo(new File("绝对路径\\"+文件名))
将文件写入本地,因为有了一个MultipartFile对象,使我们获得文件数据并操作它变得简易。
3.2多文件上传
第一种方式就是多设置几个上传文件的input,将name设置成不同的,然后后台对象增多,一样的方法执行,这里就不多赘述。
第二种方式就是通过数组的方式,也就是将MultipartFile对象设为数组来接收请求数据:
就像这样,我们只需要多uploadFile这个数组循环操作即可
这种方式下,表单中文件传输的input的name就都设为相同:
这就跟上一章讲的数组的请求传参一样,name相当于键都设为同一值,这时框架会自动匹配形参里面的这个值,而这个刚好是一个文件数组形式的对象,所以就依次往数组里添加文件对象。