繁体   English   中英

Spring Boot,在 REST 控制器中上传任意数量的文件

[英]Spring Boot, upload any amount of files in REST controller

我想创建一个端点,它接受来自用户的任意数量的不同文件。

例如:

在此处输入图片说明

然后,我想在我的控制器中接收它作为Map<String, FilePart> (或任何其他结构,我将知道哪个文件是哪个):

{
    "file1": "cactus-logo.png",
    "file2": "logo.png",
    "file3": "logo.png" (this one is actually different than file2 but has the same name)
}



我尝试了@RequestPart一些组合......

  1. 当我做:

     @RequestPart Map<String, FilePart> files

或者

    @RequestPart MultiValueMap<String, FilePart> files

我越来越:

org.springframework.web.server.ServerWebInputException: 400 BAD_REQUEST“所需的请求部分‘文件’不存在”

  1. 当我做:

     @RequestPart("files") List<FilePart> files

我需要提交这样的文件:

在此处输入图片说明

然后我没有信息哪个文件是哪个(如果它们具有相同的名称):

在此处输入图片说明

  1. 最后,我可以这样做:

     @RequestPart("file1") FilePart file1, @RequestPart("file2") FilePart file2, @RequestPart("file3") FilePart file3

然后它按预期工作,但是这样,可以始终只提交 3 个文件。 我想提交任意数量的文件。

  1. 正如评论中所建议的:

     @PutMapping(value = "/{component}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public void upload( @RequestParam Map<String, MultipartFile> files ) throws IOException {

并且地图始终为空:

在此处输入图片说明

在此处输入图片说明

结果 你应该使用@RequestParam

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void upload(@RequestParam Map<String, MultipartFile> body) {

}

然后通过表单数据媒体发布,即:

file1: select file
file2: select file
file3: select file
....

我没有提到我使用的是反应式 webflux,因此@Toàn Nguyễn Hải 发布的解决方案在我的情况下不起作用。 我相信它适用于非反应性应用程序。

对于网络流量,以下工作:

在此处输入图片说明

公平地说,我不会接受任何答案,因为他们都很好。

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM