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

原文由 midgetspy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

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

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

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

在引擎盖下,Spring Boot 将创建一个 MultipartConfigElement 基于 MultipartProperties 并且 MultipartConfigElement 将如 Spring MVC 文档 中所述使用。您可以查看 MultipartAutoConfigurationDispatcherServletConfiguration 以及查看 Spring Boot 文档 以获取更多信息。

原文由 Ali Dehghani 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 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”分别表示兆字节或千字节。

原文由 T4keo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题