2014-09-05 11 views
5

Ich verwende Spring Boot 1.1.3 mit der CommonsMultipartResolver, um das Hochladen mehrerer Dateien gleichzeitig zu ermöglichen.Wie kann man mehrere Dateien gleichzeitig mit MultipartConfigElement im Spring Boot hochladen?

Ich erhalte diese stacktrace wenn ich versuche, eine Datei größer als 1 MB hochladen:

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) 

Ich habe versucht, die maximale Upload-Größe wie diese Einstellung:

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

Allerdings bedeutet dies nicht funktioniert . Ich habe dieses Spring guide on upoading files gefunden und dort verwenden sie stattdessen MultipartConfigFactory. Allerdings muss ich jetzt die MultipartFile Klasse anstelle von MultipartHttpServletRequest in meinem Controller verwenden.

Mit der MultipartHttpServletRequest konnte ich getFileMap() tun, um alle Dateien zu bekommen, aber es gibt keine solche Methode auf MultipartFile.

Haben Sie Ideen, wie Sie mit MultipartConfigFactory und mehreren Dateien arbeiten? Ich verwende jquery-file-upload auf dem Client, wenn das wichtig wäre.

Antwort

1

Scheint, es gibt keine Notwendigkeit, die MultipartFile in der Steuerung zu verwenden, können Sie auch die MultipartHttpServletRequest verwenden. Dies ist die Unterschrift meiner @RestController kommentierte Klasse:

@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

für die Größe Problem in meinem Projekt ich diese Eigenschaften in application.properties verwenden:

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

für den Fall hat mehrere Datei ich schlage vor, Nutzungs eine Bohne wie diese

@Data 
class MultipartDTO{ 

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

    //eventually other proerties 
} 

dann natürlich in Ihrem Controller Sie eine Sache wie diese

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

Ich hoffe, das Sie im Hinblick auf die Frühlings-Stiefel gefragt 1.1.3

+0

ich einen Ansatz zu verwenden, wie dies in einem meiner Open-Source-Projekt: https://github.com/mrFlick72/socialDocumentLibrary/blob/master /book-repository-service/src/main/java/it/valeriovaudi/documentlibrary/endpoint/BookServiceEndPoint.java –

3

Die Frage kann helfen wurde. Im Laufe der Zeit funktionieren die akzeptierten Lösungen nicht mehr mit neueren Versionen von Spring Boot. Das Problem der Erhöhung der maximal zulässigen Upload-Größe besteht jedoch weiterhin.

Ich schreibe dies ab Spring Boot 1.4.2, so dass diese Lösung möglicherweise nicht für immer korrekt ist.

Von der Federführung zu uploading files die neuen Eigenschaften sind also:

spring.http.multipart.max-file-size=10Mb 
spring.http.multipart.max-request-size=10Mb