提问者:小点点

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";
    }
}

但是,当我将文件上传到此endpoint时,它似乎使用了默认的多部分配置值:

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注释生效的内容?


共3个答案

匿名用户

使用Spring Boot 2.0,您应该在application. yml中使用它

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

从留档:

Spring Boot采用Servlet 3javax. servlet.http.PartAPI来支持上传文件。默认情况下,Spring Boot将SpringMVC配置为每个文件的最大大小为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 est-size=10MB#最大请求大小。值可以使用后缀"MB"或"KB"分别表示兆字节或千字节。

匿名用户

如果您只想控制多部分属性,您可以使用multipart. max-file-sizemultipart.max-request est-size属性。例如,您可以通过在application.properties文件中添加以下配置将最大大小提高到100Mb

multipart.max-file-size=100MB
multipart.max-request-size=100MB

值可以使用后缀MBKB来指示兆字节或千字节大小。

在后台,Spring Boot将基于MultipartProperties创建一个MultipartConfigElement,并且该MultipartConfigElement将用于Servlet注册,如SpringMVC留档中所述。您可以查看MultipartAutoConfigurationDispatcherServletConfiguration以及Checkout Spring Boot留档以获取更多信息。

匿名用户

对于spring-boot 1.5.3,您应该在application. yml中使用以下代码

spring:
 http:
  multipart:
   max-file-size: 100MB
   max-request-size: 100MB

确保在yaml文件中使用空格而不是制表符。