2015-10-20 8 views
19

Ich habe eine ziemlich einfache Spring Boot-Webanwendung, ich habe eine einzelne HTML-Seite mit einem Formular mit enctype="multipart/form-data". Ich erhalte diesen Fehler:HTTP erhöhen Post MaxPostSize in Spring Boot

The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector.

Ich benutze Spring Boot standardmäßig Embedded Tomcat-Server. Anscheinend ist der Standardwert maxPostSize 2 Megabyte. Gibt es eine Möglichkeit, diesen Wert zu bearbeiten? Tun Sie dies über application.properties wäre am besten, anstatt benutzerdefinierte Beans erstellen oder Chaos mit XML-Dateien. diese

+0

Wo immer Sie Ihren mehrteiligen Resolver deklariert haben, können Sie diese Dinge ändern. –

+0

Ich habe es nirgendwo deklariert. Ich gehe davon aus, dass Spring Boot automatisch erstellt und verarbeitet wird. Bedeutet das, dass ich es nicht bearbeiten kann? – Jordan

+0

Sie können es bearbeiten. Suchen Sie den Multipart-Resolver und bearbeiten Sie den Wert. Wenn es mehrteilige Unterstützung gibt, bin ich sicher, dass Sie einige Konfiguration dafür finden werden. Sie haben Ihre Konfiguration nicht einmal in der Hauptpost gepostet, so dass niemand darauf hinweisen kann, was geändert werden soll. –

Antwort

11

Eine Lösung gefunden. Fügen Sie diesen Code derselben Klasse hinzu, auf der SpringApplication.run ausgeführt wird.

// Set maxPostSize of embedded tomcat server to 10 megabytes (default is 2 MB, not large enough to support file uploads > 1.5 MB) 
@Bean 
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception { 
    return (ConfigurableEmbeddedServletContainer container) -> { 
     if (container instanceof TomcatEmbeddedServletContainerFactory) { 
      TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container; 
      tomcat.addConnectorCustomizers(
       (connector) -> { 
        connector.setMaxPostSize(10000000); // 10 MB 
       } 
      ); 
     } 
    }; 
} 

Edit: Anscheinend, diese zu Ihrer application.properties Datei wird auch die maxPostSize erhöhen, aber ich habe es nicht versucht, mich, so kann ich nicht bestätigen.

multipart.maxFileSize=10Mb # Max file size. 
multipart.maxRequestSize=10Mb # Max request size. 
+0

das Hinzufügen der Eigenschaften funktioniert für mich: multipart.maxFileSize und multipart.maxRequestSize –

+0

die Lösung "Connector" funktionierte nicht für mich auch nicht Hat das 'multipart.maxFileSize' gemacht. Was für mich funktionierte, war 'spring.http.multipart.max-file-size' aus der Antwort unten. – Riki137

14

In application.properties Datei schreiben:

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

anpassen Größe nach Ihrem Bedarf.

+0

Versuchte das, gab mir immer noch Fehler. Ich lade eigentlich keine Dateien in das Formular hoch, ich habe einfach viele Eingabefelder mit Werten von Zehntausenden von Zeichen, und wenn ich zu viel Text habe (mehr als 2MB Text), stürzt er ab. Hoffte, die postMaxSize auf mehr als 2 MB zu erhöhen, um dieses Problem zu vermeiden. – Jordan

+0

können Sie Ihren Code und Fehler stacktrace –

+1

bitte posten Die Bindestriche sollten nicht in den Eigenschaftsnamen enthalten sein. multipart.maxRequestSize = 20MB multipart.maxFileSize = 20MB – userM1433372

1

von Dokumentation: https://spring.io/guides/gs/uploading-files/

Tuning file upload limits

When configuring file uploads, it is often useful to set limits on the size of files. Imagine trying to handle a 5GB file upload! With Spring Boot, we can tune its auto-configured MultipartConfigElement with some property settings.

Add the following properties to your existing src/main/resources/application.properties :

spring.http.multipart.max-file-size=128KB

spring.http.multipart.max-request-size=128KB

The multipart settings are constrained as follows:

  • spring.http.multipart.max-file-size is set to 128KB , meaning total file size cannot exceed 128KB.

  • spring.http.multipart.max-request-size is set to 128KB, meaning total request size for a multipart/form-data cannot exceed 128KB.

2

Es gibt einen Unterschied, wenn wir die Eigenschaften in der application.properties und Anwendung yaml definieren.

In application.yml:

spring: 
    http: 
    multipart: 
     max-file-size: 256KB 
     max-request-size: 256KB 

Und in application.propeties:

spring.http.multipart.max-file-size = 128KB spring.http.multipart.max-Anfrage- size = 128KB

Hinweis: Feder Version 4.3 und Spring-Boot 1.4

1

Erstens, stellen Sie sicher, dass Sie spring.servlet stattverwenden.

--- 
spring: 
    servlet: 
    multipart: 
     max-file-size: 10MB 
     max-request-size: 10MB 

Wenn Sie Kater verwenden haben, können Sie bis zu schaffen EmbeddedServletContainerCustomizer beenden, was zu tun nicht wirklich nette Sache ist. Wenn Sie ohne Tomate leben können, können Sie replace tomcat with e.g. undertow und dieses Problem überhaupt vermeiden.

+0

Undertow hat das gleiche Problem, so dass das Umschalten dieses Problem nicht vermeidet. Die Konfiguration in dieser Antwort funktioniert mit Undertow in den neuesten Versionen von Spring-Boot v1.5.9 –

Verwandte Themen