私はかなりシンプルなSpring Boot Webアプリケーションを手に入れました。enctype="multipart/form-data"
を持つフォームを持つ単一のHTMLページがあります。私はこのエラーを受け取っています:
マルチパートリクエストには、関連付けられたコネクタに設定されたmaxPostSizeの制限を超えたパラメーターデータ(アップロードされたファイルを除く)が含まれていました。
Spring Bootのデフォルトの組み込みTomcatサーバーを使用しています。明らかに、デフォルトのmaxPostSize
値は2メガバイトです。この値を編集する方法はありますか? application.properties
を介して行うことは、XMLファイルを使用してカスタマイズされたBeanまたは混乱を作成するよりも、最善です。
ソリューションを見つけました。 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.
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
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本文のエンコードにも固執する人の助けになることを願っています。
ドキュメントから: 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を超えてはならないことを意味します。
application.yaml
とapplication.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
まず、spring.servlet
の代わりにspring.http
を使用していることを確認してください。
---
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
Tomcatを使用する必要がある場合は、 EmbeddedServletContainerCustomizer を作成することになりますが、これは実際には良いことではありません。
Tomatなしで生活できる場合は、 Tomcatをundertowなどに置き換えて にして、この問題をまったく回避できます。
私にとっては以前の作品は何もありません(おそらく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();
}
}
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
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" />