2015-10-20 691 views
19

我有一個相當簡單的Spring Boot Web應用程序,我有一個帶有enctype="multipart/form-data"表單的HTML頁面。我得到這個錯誤:在Spring Boot中增加HTTP Post maxPostSize

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

我使用的是Spring Boot的默認嵌入式tomcat服務器。顯然,默認的maxPostSize值是2兆字節。有什麼方法可以編輯這個值嗎?通過application.properties這樣做是最好的,而不是必須創建自定義的bean或混淆XML文件。

+0

無論你聲明你的多部分解析器,你可以改變這些東西。 –

+0

我沒有在任何地方宣佈它。我假設這意味着春季啓動會自動創建並處理它。這是否意味着我無法編輯它? – Jordan

+0

您可以編輯它。找到多部分解析器並編輯該值。如果有多部分支持,我相信你會找到它的一些配置。你甚至沒有在你的主帖中發佈你的配置,所以沒有人可以指出要改變什麼。 –

回答

11

找到了解決方案。將此代碼添加到運行SpringApplication.run的同一個類。

// 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 
       } 
      ); 
     } 
    }; 
} 

編輯:顯然,添加以下內容到application.properties文件也將增加maxPostSize,但我還沒有嘗試過自己,所以我無法證實。

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

添加屬性適用於我:multipart.maxFileSize和multipart.maxRequestSize –

+0

「連接器」解決方案對我而言並不適用,也不適用於我'multipart.maxFileSize'。對我來說有效的是以下答案中的'spring.http.multipart.max-file-size'。 – Riki137

14

application.properties文件這樣寫:

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

根據您的需要調整大小。

+0

試過,仍然給我錯誤。我實際上並沒有上傳表單中的任何文件,我只是有很多輸入字段,數值長達數萬個字符,如果我的文本太多(超過2MB的文本),它會崩潰。希望將postMaxSize增加到2MB以避免這個問題。 – Jordan

+0

可以請你發佈你的代碼和錯誤stacktrace –

+1

破折號不應該包含在屬性名稱中。 multipart.maxRequestSize = 20MB multipart.maxFileSize = 20MB – userM1433372

1

從文檔: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

有一些差異,當我們定義在application.properties和應用YAML屬性。

在application.yml:

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

而在application.propeties:

spring.http.multipart.max文件大小= 128KB spring.http.multipart.max-請求 - 大小= 128KB

注:Spring版本4.3和Spring 1.4的引導

1

首先,確保你使用的spring.servlet代替spring.http

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

如果你有使用Tomcat,你可能最終創造EmbeddedServletContainerCustomizer,這是不是非常好的事情。

如果你可以沒有托馬,你可以replace tomcat with e.g. undertow,並避免這個問題。

+0

Undertow具有相同的問題,因此切換不能避免此問題。這個答案中的配置可以在Undertow中使用最新版本的Spring-Boot v1.5.9 –