一. 文件上传客户端表单三要素
1.表单项type=“file”。
2.表单提交方式post,文件大小原因。
3.表单的enctype属性是多部分表单形式enctype=“multipart/form-data”,请求正文内容就变成了多部分形式,就会有文件内容,否则只有文件名。
<form action="${pageContext.request.contextPath}/upload/quick" method="post" enctype="multipart/form-data">
名称<input type="text" name="username"><br/>
文件1<input type="file" name="uploadFile"><br/>
文件2<input type="file" name="uploadFile2"><br/>
<input type="submit" value="提交">
</form>
1
2
3
4
5
6
二. 配置文件上传所需坐标
pom.xml中导入fileupload和io坐标
commons-fileupload commons-fileupload 1.3.1 commons-io commons-io 2.6
三. 配置文件上传解析器
spring-mvc.xml中配置文件上传解析器
<!-- 配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传文件编码-->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 上传文件总大小上限-->
<property name="maxUploadSize" value="500000"></property>
<!-- 单个文件大小上限-->
<property name="maxUploadSizePerFile" value="50000000"></property>
</bean>
1
2
3
4
5
6
7
8
9
放进mvc注解驱动
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
1
四. 编写文件上传代码
参数名称需要和表单项name对应相同
controller
@Controller
@RequestMapping("/upload")
public class UserContoller {
@RequestMapping(value = "/quick")
@ResponseBody //不跳转,将返回的值直接回写
public void save(String username,MultipartFile uploadFile,MultipartFile uploadFile2) throws IOException {
System.out.println(username);
System.out.println(uploadFile);
//获取文件名称
String filename = uploadFile.getOriginalFilename();
uploadFile.transferTo(new File("D:\\Users\\"+filename));
String filename2 = uploadFile2.getOriginalFilename();
uploadFile2.transferTo(new File("D:\\Upload\\"+filename2));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
当文件很多的时候,以数组的方式接收。表单的文件上传项的name值和controller参数数组名相同,就可以直接存入数组中。
表单
<form action="${pageContext.request.contextPath}/upload/quick2" method="post" enctype="multipart/form-data">
名称<input type="text" name="username"><br/>
文件1<input type="file" name="uploadFile"><br/>
文件2<input type="file" name="uploadFile"><br/>
<input type="submit" value="提交">
</form>
1
2
3
4
5
6
controller
@RequestMapping(value = "/quick2")
@ResponseBody //不跳转,将返回的值直接回写
public void save2(String username,MultipartFile[] uploadFile) throws IOException {
System.out.println(username);
System.out.println(uploadFile);
for (MultipartFile multipartFile : uploadFile) {
//获取文件名称
String filename = multipartFile.getOriginalFilename();
multipartFile.transferTo(new File("D:\\Upload"+filename));
}
}
————————————————
原文链接:https://blog.csdn.net/tannins_/article/details/102580169 |
|