SpringBoot的@MultipartConfig maxFileSize未生效

2022-09-01 06:18:27

我有一个带有注释的控制器(其片段如下所示):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


答案 1

在Spring Boot 2.0中,您应该在应用程序中使用它。yml

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

文档中

Spring Boot 采用 Servlet 3 API 来支持上传文件。默认情况下,Spring Boot 将 Spring MVC 配置为单个请求中每个文件的最大大小为 1MB,最大文件数据为 10MB。您可以使用类中公开的属性重写这些值、中间数据存储到的位置(例如,到目录的位置)以及超过该阈值的数据将刷新到磁盘。例如,如果要指定文件无限制,请将 spring.servlet.multipart.max文件大小属性设置为 。javax.servlet.http.Part/tmpMultipartProperties-1

摘自附录A文档

spring.servlet.multipart.max-file-size=1MB # Max file size.值可以使用后缀“MB”或“KB”分别表示兆字节或千字节。

spring.servlet.multipart.max-request-size=10MB # Max request size.值可以使用后缀“MB”或“KB”分别表示兆字节或千字节。


答案 2

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

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

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

在引擎盖下,Spring Boot 将创建一个基于 Servlet 注册的,并将用于 Servlet 注册,如 Spring MVC 文档中所述。您可以查看多部分自动配置调度程序ServletConfiguration和Checkout Spring Boot文档以获取更多信息。MultipartConfigElementMultipartPropertiesMultipartConfigElement


推荐