我希望用户能够使用任意名称和origfilename提交任意数量的文件。
一个人如何获得请求中已提交文件的列表?
@RequestParam(name = "*") MultipartFile[] files
我希望使用正则表达式或名称参数中的类似参数可以工作,但我的所有测试均失败。
相当于烧瓶中的是
request.files
有什么想法吗?
相关问题:Getting files in controller without @RequestParam name
您可以使用MultipartRequest#getFileMap
来获得所需的多部分文件:
MultipartRequest multipartRequest = .....
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
MultipartFile[] files = fileMap.values().toArray(new MultipartFile[0]);
...
例如,即使将相同的参数名称分配给多个文件,也可以使用MultipartRequest#getMultiFileMap
获取所有文件:
<input type="file" name="file1"/>file1
<input type="file" name="file2"/>file2
<input type="file" name="file2"/>file2X
Spring的DispatcherServlet
/ MultipartFilter
将HttpServletRequest
对象包装在MultipartHttpServletRequest
(扩展MultipartRequest
)对象中,当您发送带有请求的multipart/form-data
且MultipartRequest
可以是控制器的方法参数。因此,控制器的方法将如下所示:
@RequestMapping("upload")
public String upload(MultipartRequest multipartRequest) {
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
MultipartFile[] files = fileMap.values().toArray(new MultipartFile[0]);
// Use when the same parameter name is assigned to multiple files.
// MultiValueMap<String, MultipartFile> multiFileMap = multipartRequest.getMultiFileMap();
// MultipartFile[] files = multiFileMap.values().stream().flatMap(values -> values.stream()).toArray(MultipartFile[]::new);
for (MultipartFile multipartFile : files) {
System.out.println("param name: " + multipartFile.getName());
System.out.println("filename: " + multipartFile.getOriginalFilename());
System.out.println("size: " + multipartFile.getSize());
}
return ".....";
}
当发送“ 1.jpg”(参数名称为“ file1”)和“ 2.jpg”(参数名称为“ file2”)时,将得到如下输出:
param name: file1
filename: 1.jpg
size: 155152
param name: file2
filename: 2.jpg
size: 154015
海上也
Javadoc of DispatcherServlet#checkMultipartJavadoc of MultipartFilterJavadoc of MultipartResolver#resolveMultipartJavadoc of MultipartHttpServletRequest