如何在Spring Boot中使用MultipartConfigElement一次上传多个文件?

Wim*_*uwe 5 spring spring-mvc jquery-file-upload spring-boot

我正在使用Spring Boot 1.1.3 CommonsMultipartResolver来允许一次上传多个文件.

当我尝试上传大于1 MB的文件时,我得到了这个堆栈跟踪:

Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: 
The field files[] exceeds its maximum permitted size of 1048576 bytes.
    at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:637)
    at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76)
    at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135)
    at java.io.FilterInputStream.read(FilterInputStream.java:107)
Run Code Online (Sandbox Code Playgroud)

我尝试设置这样的最大上传大小:

public MultipartResolver multipartResolver()
{
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize( 100 * MEGABYTE_IN_BYTES );
    return resolver;
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我已经找到了关于upoading文件的Spring指南,他们那里使用了MultipartConfigFactory.但是,我现在需要使用MultipartFile该类而不是MultipartHttpServletRequest在我的控制器中.

随着MultipartHttpServletRequest我能做getFileMap()得到的所有文件,但上没有这样的方法MultipartFile.

有关如何使用MultipartConfigFactory和多个文件的任何想法?我在客户端上使用jquery-file-upload,如果这很重要的话.

Ond*_*zek 7

增加上传限制的正确方法是
multipart.maxFileSize=10Mb
application.properties文件中设置属性.你可以在这里阅读更多关于这个主题的信息 /sf/answers/1894356271/ 和这里的 MultipartProperties.java


Wim*_*uwe 2

看来控制器中不需要使用MultipartFile,也可以使用MultipartHttpServletRequest. 这是我带注释的类的签名@RestController

@RequestMapping(value = "/{datasheetId}/addDoc", method = RequestMethod.POST)
@Secured(ROLE_USER)
public ResponseEntity<?> addDocumentToDatasheet( Principal principal,
                                                 @PathVariable("datasheetId") long datasheetId,
                                                 MultipartHttpServletRequest request ) throws IOException
{
     Map<String, MultipartFile> fileMap = request.getFileMap();
     // handle fileMap further...
}
Run Code Online (Sandbox Code Playgroud)