多文件上传MultipartHttpServletRequest使用
废话少说直接撸代码
private void parseHttpServletRequest(HttpServletRequest request)throws Exception{
List<String> fileNames = new ArrayList<>();
List<File> fileEntity = new ArrayList<>();
MyFile file = new MyFile();
//创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//判断 request 是否有文件上传,即多部分请求
if(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
MultiValueMap<String,MultipartFile> multiFileMap = multiRequest.getMultiFileMap();
List<MultipartFile> fileSet = new LinkedList<>();
for(Entry<String, List<MultipartFile>> temp : multiFileMap.entrySet()){
fileSet = temp.getValue();
}
for(MultipartFile temp : fileSet){
File file2 = new File("c:/temp/"+temp.getOriginalFilename());
if(!file2.exists()){
file2.mkdirs();
}
fileNames.add(temp.getOriginalFilename());
temp.transferTo(file2);
fileEntity.add(file2);
}
file.setFileNames(fileNames);
file.setFileEntity(fileEntity);
}
}
其实上面的代码中就是在获取多个文件对象时有个比较绕的地方,
通过
multiRequest.getFileNames();//值是Page这个字符串
multiRequest.getFileMap();
//会截断
MultiValueMap <String,MultipartFile> multiFileMap = multiRequest.getMultiFileMap()
1
中的MultipartFile链表,只能获取一个。
debug时发现request中的MultiFileMap的大小确实是一个,但是这个key对应的value是一个链表。
(有个初步猜想,可能是在上传的文件是分Page上传的,文件较少时就放到一个List(LinkedList)中,文件较多获取较大时分页传送,具体的阀值没有测试)