SpringBoot的@MultipartConfig maxFileSize没有生效
我有一个带有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
属性。 例如,您可以通过在application.properties
文件中添加以下配置来将最大大小提高到100Mb
:
multipart.max-file-size=100MB multipart.max-request-size=100MB
值可以使用后缀MB
或KB
来指示兆字节或千字节大小。
在引擎盖下,Spring Boot将创建一个基于MultipartProperties
,并且将在Servlet注册中使用MultipartConfigElement
,如Spring MVC文档中所述 。 您可以查看MultipartAutoConfiguration
和DispatcherServletConfiguration
以及Checkout Spring Boot文档以获取更多信息。
使用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
在我们公司的项目中,我发现其中一个是Spring Boot 1.3.5版本,所以对于版本<1.4你应该使用
multipart.max-file-size=30MB multipart.max-request-size=30MB
从文档(v1.4.0) :
Spring Boot包含Servlet 3
javax.servlet.http.Part
API以支持上传文件。 默认情况下,Spring Boot为Spring MVC配置最大文件,每个文件大小为1MB,单个请求中最大文件数据为10MB。 您可以覆盖这些值,以及存储中间数据的位置(例如,到/tmp
目录)以及使用MultipartProperties
类中公开的属性将数据刷新到磁盘的阈值。 例如,如果要指定文件不受限制,请将spring.http.multipart.max-file-size
属性设置为-1
。当您希望在Spring MVC控制器处理程序方法中将多部分编码的文件数据作为
MultipartFile
类型的@RequestParam
注释参数接收时,多部分支持非常有用。
版本1.3.8的相同文档:
例如,如果要指定文件不受限制,请将
multipart.maxFileSize
属性设置为-1
。
使用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配置Spring MVC,每个文件的最大大小为1MB ,单个请求中的文件数据最大为10MB 。 您可以覆盖这些值,中间数据的存储位置(例如,到/tmp
目录),以及使用MultipartProperties
类中公开的属性将数据刷新到磁盘的阈值。 例如,如果要指定文件不受限制,请将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.servlet.multipart.max-file-size=30MB spring.servlet.multipart.max-request-size=40MB