web-dev-qa-db-ja.com

Spring BootでHTTP Post maxPostSizeを増やす

私はかなりシンプルなSpring Boot Webアプリケーションを手に入れました。enctype="multipart/form-data"を持つフォームを持つ単一のHTMLページがあります。私はこのエラーを受け取っています:

マルチパートリクエストには、関連付けられたコネクタに設定されたmaxPostSizeの制限を超えたパラメーターデータ(アップロードされたファイルを除く)が含まれていました。

Spring Bootのデフォルトの組み込みTomcatサーバーを使用しています。明らかに、デフォルトのmaxPostSize値は2メガバイトです。この値を編集する方法はありますか? application.propertiesを介して行うことは、XMLファイルを使用してカスタマイズされたBeanまたは混乱を作成するよりも、最善です。

37
Jordan

ソリューションを見つけました。 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.
16
Jordan

application.propertiesファイルにこれを書きます:

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

必要に応じてサイズを調整します。

更新

注:Spring Boot 2、しかしあなたは今できる

# Max file size.
spring.servlet.multipart.max-file-size=1MB
# Max request size.
spring.servlet.multipart.max-request-size=10MB

付録A.一般的なアプリケーションプロパティ-Spring

38

POSTリクエストでx-www-form-urlencoded mediatypeを使用している場合(私と同じように)、spring-bootのmultipartプロパティは機能しません。スプリングブートアプリケーションもTomcatを起動している場合、application.propertiesファイルで次のプロパティを設定する必要があります。

# Setting max size of post requests to 6MB (default: 2MB)
server.Tomcat.max-http-post-size=6291456

その情報は、スプリングブートドキュメントのどこにも見つかりませんでした。 x-www-form-urlencoded本文のエンコードにも固執する人の助けになることを願っています。

10
Fabi Ko

ドキュメントから: https://spring.io/guides/gs/uploading-files/

ファイルのアップロード制限の調整

ファイルのアップロードを設定するとき、ファイルのサイズに制限を設定すると便利な場合があります。 5GBのファイルのアップロードを処理しようとしていると想像してみてください! Spring Bootでは、いくつかのプロパティ設定を使用して、自動構成されたMultipartConfigElementを調整できます。

既存のsrc/main/resources/application.propertiesに次のプロパティを追加します。

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

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

マルチパート設定は次のように制限されています。

  • spring.http.multipart.max-file-size is set to 128KBは、合計ファイルサイズが128KBを超えないことを意味します。

  • spring.http.multipart.max-request-sizeは128KBに設定されます。これは、multipart/form-dataの合計リクエストサイズが128KBを超えてはならないことを意味します。

5
Dániel Kis

application.yamlapplication.propertiesでプロパティを定義する場合、いくつかの違いがあります。

application.yml ::

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

そしてapplication.propetiesで:

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

注:Springバージョン4.3およびSpringブート1.4

4
denzal

まず、spring.servletの代わりにspring.httpを使用していることを確認してください。

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

Tomcatを使用する必要がある場合は、 EmbeddedServletContainerCustomizer を作成することになりますが、これは実際には良いことではありません。

Tomatなしで生活できる場合は、 Tomcatをundertowなどに置き換えて にして、この問題をまったく回避できます。

3

私にとっては以前の作品は何もありません(おそらくyamlでアプリケーションを使用することは問題です)が、それを使用してその問題に乗ります:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.util.unit.DataSize;

import javax.servlet.MultipartConfigElement;

@ServletComponentScan
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize(DataSize.ofBytes(512000000L));
        factory.setMaxRequestSize(DataSize.ofBytes(512000000L));
        return factory.createMultipartConfig();
    }
}
0
user11999314

Tomcatとサーブレットの設定を適用する

application.propertiesでTomcatの最大投稿サイズを設定できます。これは、以下のようにintで設定されます。他のいくつかの回答のように、spring.servlet.multipart.max-request-size=10MBを設定するだけでは不十分な場合があります。

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
server.Tomcat.max-http-post-size=100000000
server.Tomcat.max-swallow-size=100000000

Spring Bootでの作業2.0.5.RELEASE

0
Steve Banton

OPがmaxPostSizeではなく、maxFileSizeについて話しているため、ほとんどのソリューションは私にとってうまくいきませんでした。サイズを超えています)

解決策:/Tomcat/conf/server.xmlでコネクタにmaxPostSize = ""属性を追加します

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxPostSize="10485760"
           redirectPort="8443" />
0
spiritworld