2014-09-05 4646 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 
相關問題