空列表<多部分文件>尝试在春季使用ng文件上传上传许多文件时

我有以下控制器方法可以一次上传多个文件,灵感来自这篇博客文章以及这个问题的答案:

@RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST)
@PreAuthorize(...)
public void upload(@PathVariable User user, 
                   @RequestParam("file") List<MultipartFile> files) {
  // handle files
}

但是,尽管请求包含这些文件,但文件列表始终为空。

如果我将第三个MultipartRequest参数添加到该方法中:

public void upload(@PathVariable User user, 
                   @RequestParam("file") List<MultipartFile> files,
                   MultipartRequest request)

我可以看到它包含我上传的文件正确:

request contents

空的原因可能是什么?List<MultipartFile>

我正在使用ng-file-upload来提交文件,但我认为它与问题无关。春季 4.2.4.


答案 1

问题是ng-file-upload默认使用名称等提交文件数组。使用服务时,可以使用 arrayKey 值对其进行配置。将其设置为空字符串将强制在同一键下发送文件,该键使用Spring正确解析,并且包含已提交的所有文件。file[0]file[1]Uploadfile@RequestParam("file") List<MultipartFile>

Upload.upload({url: url, data: {file: arrayOfFiles}, arrayKey: ''})

答案 2

尝试像这样使用:@ModelAttribute

    @RequestMapping(value = "/{user}/attachment", method = RequestMethod.POST)
    @PreAuthorize(...) 
    public void upload(@PathVariable User user,@ModelAttribute("uploadFile") FileUpload uploadFile) throws IllegalStateException, IOException {

    List<MultipartFile> files = uploadFile.getFiles();
    ...

并创建一个类,如下所示:

     public class FileUpload {
     private List<MultipartFile> files;
     public List<MultipartFile> getFiles() {
        return files;
     }

    public void setFiles(List<MultipartFile> files) {
       this.files= files;
      }
   }

推荐