2014-09-05 4655 views
5

我使用Spring Boot 1.1.3和CommonsMultipartResolver来允许一次上传多个文件。如何在Spring Boot中使用MultipartConfigElement一次上传多个文件?

我得到这个堆栈跟踪,当我尝试上传的文件大于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) 

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

public MultipartResolver multipartResolver() 
{ 
    CommonsMultipartResolver resolver = new CommonsMultipartResolver(); 
    resolver.setMaxUploadSize(100 * MEGABYTE_IN_BYTES); 
    return resolver; 
} 

然而,这不起作用。我发现这个Spring guide on upoading files,他们在那里使用MultipartConfigFactory。但是,我现在需要在我的控制器中使用MultipartFile类而不是MultipartHttpServletRequest

随着MultipartHttpServletRequest我可以做getFileMap()获取所有的文件,但MultipartFile没有这样的方法。

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

回答

1

似乎没有必要在控制器中使用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... 
} 
1

用于在我的项目的大小问题,我在application.properties使用这个属性:

multipart.max-file-size=100Mb 
multipart.max-request-size=100Mb 

的情况下有多个文件我建议使用这样的

@Data 
class MultipartDTO{ 

    private MultipartFile file1; 
    private MultipartFile file2; 
    ..... 
    private MultipartFile filen; 

    //eventually other proerties 
} 

然后豆当然在你的控制器,你colud有这样

一件事
@RequestMapping(value = "/multipartUrl", method = RequestMethod.POST, consumes = "multipart/form-data") 
public ResponseEntity multipartCall(MultipartDTO multipartDTO){ 
    .... 
} 

我希望这可以帮助你

+0

我用这样的方法在我的开源项目:https://github.com/mrFlick72/socialDocumentLibrary/blob/master /book-repository-service/src/main/java/it/valeriovaudi/documentlibrary/endpoint/BookServiceEndPoint.java – 2016-03-08 20:09:14

3

有人提问关于春天引导1.1.3。随着时间的推移,接受的解决方案不再适用于Spring Boot的新版本。但是,增加最大允许上传大小的问题仍然存在。

我写这个Spring Boot 1.4.2,所以这个解决方案可能永远不是正确的。

从春天指导uploading files新特性是这样的:

spring.http.multipart.max-file-size=10Mb 
spring.http.multipart.max-request-size=10Mb 
相关问题