MultipartConfig
アノテーションが付いたコントローラーがあります(そのスニペットを以下に示します)。
@RestController
@RequestMapping("packages")
@MultipartConfig(maxFileSize = 1024*1024*1024, maxRequestSize = 1024*1024*1024)
public class PackagesController
{
@RequestMapping(method = RequestMethod.POST)
public String create(@RequestParam("package") MultipartFile uploadedPackage)
{
// do stuff to the file
return "create";
}
}
ただし、このエンドポイントにファイルをアップロードすると、デフォルトのマルチパート構成値を使用しているように見えます。
Caused by: org.Apache.Tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field package exceeds its maximum permitted size of 1048576 bytes.
at org.Apache.Tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.Java:633) ~[Tomcat-embed-core-8.0.32.jar:8.0.32]
at org.Apache.Tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.Java:76) ~[Tomcat-embed-core-8.0.32.jar:8.0.32]
at org.Apache.Tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.Java:135) ~[Tomcat-embed-core-8.0.32.jar:8.0.32]
at Java.io.FilterInputStream.read(FilterInputStream.Java:107) ~[na:1.8.0_45]
at org.Apache.Tomcat.util.http.fileupload.util.Streams.copy(Streams.Java:98) ~[Tomcat-embed-core-8.0.32.jar:8.0.32]
at org.Apache.Tomcat.util.http.fileupload.util.Streams.copy(Streams.Java:68) ~[Tomcat-embed-core-8.0.32.jar:8.0.32]
at org.Apache.Tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.Java:293) ~[Tomcat-embed-core-8.0.32.jar:8.0.32]
at org.Apache.catalina.connector.Request.parseParts(Request.Java:2776) ~[Tomcat-embed-core-8.0.32.jar:8.0.32]
... 30 common frames omitted
私のアプリケーションは次のようになります。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
}
@MultipartConfig
アノテーションを有効にするために不足しているものはありますか?
マルチパートプロパティのみを制御する場合は、multipart.max-file-size
およびmultipart.max-request-size
プロパティを使用できます。たとえば、次の設定を100Mb
ファイルに追加することで、最大サイズをapplication.properties
に引き上げることができます。
multipart.max-file-size=100MB
multipart.max-request-size=100MB
値には、接尾辞MB
またはKB
を使用して、Megabyteまたはを示すことができますキロバイトサイズ。
内部では、Spring BootはMultipartConfigElement
に基づいてMultipartProperties
を作成し、そのMultipartConfigElement
は Spring MVC documentation =。詳細については MultipartAutoConfiguration
および DispatcherServletConfiguration
およびCheckout Spring Boot documentation をご覧ください。
Spring Boot 2.0では、これをapplication.ymlで使用する必要があります
spring:
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
ドキュメント から:
Spring Bootは、ファイルのアップロードをサポートするためにServlet 3
javax.servlet.http.Part
APIを採用しています。デフォルトでは、Spring Bootはファイルごとに最大サイズ1MBと最大10MB1回のリクエストでのファイルデータ。MultipartProperties
クラスで公開されているプロパティを使用して、これらの値、中間データの保存場所(/tmp
ディレクトリなど)、およびデータがディスクにフラッシュされるしきい値をオーバーライドできます。たとえば、ファイルを無制限に指定する場合は、spring.servlet.multipart.max-file-sizeプロパティを-1
に設定します。
ドキュメントの付録A から抽出
spring.servlet.multipart.max-file-size = 1MB#最大ファイルサイズ。値は、サフィックス「MB」または「KB」を使用して、それぞれメガバイトまたはキロバイトを示すことができます。
spring.servlet.multipart.max-request-size = 10MB#最大リクエストサイズ。値は、サフィックス「MB」または「KB」を使用して、それぞれメガバイトまたはキロバイトを示すことができます。
Spring-boot 1.5.3では、application.ymlで次のコードを使用する必要があります
spring:
http:
multipart:
max-file-size: 100MB
max-request-size: 100MB
Yamlファイルではタブではなくスペースを使用してください。
マルチパートアップロードのカスタム制限を設定するには、以下のプロパティを使用します(サンプルサイズ30MBの場合):
spring.http.multipart.max-file-size=30MB
spring.http.multipart.max-request-size=30MB
私たちの会社のプロジェクトでは、そのうちの1つがSpring Bootバージョン1.3.5であることがわかったため、バージョン<1.4の場合は
multipart.max-file-size=30MB
multipart.max-request-size=30MB
docs(v1.4.0) から:
Spring Bootはサーブレット3を包含します
javax.servlet.http.Part
ファイルのアップロードをサポートするAPI。既定では、Spring Bootは、Spring MVCを1ファイルあたり最大1MBのファイルで構成し、1回の要求で最大10MBのファイルデータを構成します。これらの値と、中間データが保存されている場所(たとえば、/tmp
ディレクトリ)およびMultipartProperties
クラスで公開されているプロパティを使用して、データがディスクにフラッシュされるしきい値。たとえば、ファイルを無制限に指定する場合は、spring.http.multipart.max-file-size
プロパティから-1
。マルチパートサポートは、マルチパートでエンコードされたファイルデータを
@RequestParam
- Spring MVCコントローラーハンドラーメソッドのMultipartFile
型の注釈付きパラメーター。
バージョン1.3.8の同じドキュメント:
たとえば、ファイルを無制限に指定する場合は、
multipart.maxFileSize
プロパティから-1
。
Spring Boot v2 +の場合、application.propertiesに次を追加します。
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=40MB
Jenkinsスクリプトを介して値が挿入される展開では、「-」は許可されません。つかいます:
env:
- name: SPRING_SERVLET_MULTIPART_MAXREQUESTSIZE
value: "10MB"
- name: SPRING_SERVLE
value: "10MB"
アプリケーションプロパティは1つのオプションです。別のオプションは
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize("10MB");
factory.setMaxRequestSize("10MB");
return factory.createMultipartConfig();
}