如何获得所有提交的MultipartFile,无论其名称如何

问题描述 投票:0回答:1

我希望用户能够使用任意名称和origfilename提交任意数量的文件。

一个人如何获得请求中已提交文件的列表?

@RequestParam(name = "*") MultipartFile[] files

我希望使用正则表达式或名称参数中的类似参数可以工作,但我的所有测试均失败。

相当于烧瓶中的是

request.files

有什么想法吗?

java spring spring-boot servlets
1个回答
0
投票

相关问题: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 / MultipartFilterHttpServletRequest对象包装在MultipartHttpServletRequest(扩展MultipartRequest)对象中,当您发送带有请求的multipart/form-dataMultipartRequest可以是控制器的方法参数。因此,控制器的方法将如下所示:

    @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

© www.soinside.com 2019 - 2024. All rights reserved.