最近在系統(tǒng)的學習springmvc,在寫demo的時候發(fā)現(xiàn)multipartHttpServletRequest.getFileMap();
一直是空,找解決方案都不是很理想它碎,后來去閱讀了一下官網(wǎng)說明原來在定義文件解析器MultipartResolver的時候函荣,沒有設置resolveLazily屬性為true(默認值為false)
最終實現(xiàn)多文件上傳代碼如下:
//文件解析器
@Bean
public MultipartResolver multipartResolver(){
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
multipartResolver.setDefaultEncoding("UTF-8");
//問題所在
multipartResolver.setResolveLazily(true);
return multipartResolver;
}
controller里就可以獲取到文件流了
//支持批量上傳
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody
String upload(HttpServletRequest request) {
MultipartHttpServletRequest multipartHttpServletRequest = this.resolver.resolveMultipart(request);
Map<String, MultipartFile> fileMap = multipartHttpServletRequest.getFileMap();
System.out.println(fileMap.isEmpty());
fileMap.forEach((key, file) -> {
try {
System.out.println(key);
FileUtils.writeByteArrayToFile(new File("/home/sxq/learnspring" + File.separator + file.getOriginalFilename()), file.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
});
return "success";
}
猜測:MultipartResolver在initBinder的時候默認會自動解析request,并清空文件流里的內(nèi)容扳肛,導致在controller中的request獲取不到文件流信息傻挂,當設置multipartResolver.setResolveLazily(true);
則不會自動解析
如有不對請多指教。