client上传文件通过form表单发送数据
form.encType常用类型:
1)application/x-www-form-urlencoded:会将表单内的数据转换为键值对
2)multipart/form-data:既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。
3)application/octet-stream:只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。’
确认参数名与上传request参数名称对应一致,避免传入的参数为空,
未配置多媒体数据解析器报错如下
Request processing failed;
nested exception is org.springframework.web.multipart.MultipartException:
Failed to parse multipart servlet request; nested exception is java.lang.IllegalStateException:
Unable to process parts as no multi-part configuration has been provided
springmvc上传文件对应接收
@RequestMapping("/item") Controller 中形参方法实现
@RequestMapping("/uploadMultiPartOne")
public String upload(MultipartFile multipartFile) throws Exception {
if(multipartFile!=null) {
// 客户端上传文件名
String uploadFileName = multipartFile.getOriginalFilename();
// 文件后缀uploadFileName.substring(uploadFileName.lastIndexOf("."));
// UUID.randomUUID().toString() 产生的字符串唯一
String newFileName = UUID.randomUUID().toString()+uploadFileName.substring(uploadFileName.lastIndexOf("."));
File file = new File("F:\\uploadMultipartFile\\"+newFileName);
multipartFile.transferTo(file);
return "item/success";
}else {
return "item/error";
}
}
多媒体表单input.name与接收请求形参名一致,数据绑定,form.encType=multipart/form-data
<form action="${pageContext.request.contextPath }/item/uploadMultiPartOne" method="post" name="testUploadFrom" enctype="multipart/form-data">
<input type="file" name="multipartFile">
</form>
springmvc多文件上传的接收
@RequestMapping("/item") Controller 中只带request形参方法实现
@RequestMapping("/uploadMultiPartMore")
public String upload(HttpServletRequest request) throws Exception {
// 创建解析请求上下文解析器对象
CommonsMultipartResolver cmResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
// 判断请求 encType属性是否为multipart/form-data
if(cmResolver.isMultipart(request)) {
// 将HttpServletRequest请求强转为Spring的MultipartHttpServletRequest,是一个将请求包装的过程
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 得到迭代所有文件key的迭代器
Iterator<String> iterator = multipartRequest.getFileNames();
while(iterator.hasNext()) {
// 迭代所以文件保存的key,key即 form.fileInput.name
String key = iterator.next().toString();
// 得到多媒体文件
MultipartFile multipartFile = multipartRequest.getFile(key);
// 判断对象非空将数据写入文件
if(multipartFile!=null) {
String path = "F:\\uploadMultipartFile\\"+multipartFile.getOriginalFilename();
multipartFile.transferTo(new File(path));
}
}
return "item/success";
}
return "item/error";
}
多媒体表单form.encType=multipart/form-data,保证表单fileInput.name唯一标识
<form action="${pageContext.request.contextPath }/item/uploadMultiPartMore" method="post" name="testUploadFrom" enctype="multipart/form-data">
<input type="file" name="multipartFile1">
<input type="file" name="multipartFile2">
<input type="file" name="multipartFile3">
</form>