原创

Spring Boot 分段上传最大文件大小 分段文件上传 Spring Boot

温馨提示:
本文最后更新于 2024年04月12日,已超过 37 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

我正在将 Java 应用程序从非常旧的 Spring Boot 版本更新到版本 3.2.1。该应用程序的功能之一仅仅是将文件上传到 S3。我可以毫无问题地上传小于 1MB 的文件,但上传更大的文件会出现422错误:message : "Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes."

我已经设置了这些 application.yml 参数并通过在运行时打印它们来验证它们:

spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 10MB
      max-request-size: 10MB
server:
  tomcat:
    max-swallow-size: -1
    max-http-form-post-size: -1

我尝试将一个 bean 添加到我的应用程序中,并验证它在应用程序启动期间正在运行:

@Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize(DataSize.ofBytes(512000000L));
        factory.setMaxRequestSize(DataSize.ofBytes(512000000L));
        return factory.createMultipartConfig();
    }

我认为这些更改最大文件大小的尝试无效,因为错误消息中首发的顶部不会更改。

我查阅了大量 StackOverflow 和其他文章,包括:

我正在使用这些库的 3.2.1 版本(还有更多):

  • 弹簧启动启动器
  • spring-boot-启动器-执行器
  • spring-boot-启动器-hateoas
  • spring-boot-starter-数据-jpa
  • spring-boot-starter-数据休息

...并且自动包含内置 Tomcat 10.1.17。

我跟踪了 Tomcat 代码,并在 Request.parseParts() 和 FileUploadBase.setSizeMax() 中设置了断点。有趣的是,当我上传小于 1MB 的文件时,会遇到断点,并且最大的文件大小是我配置的值。当我上传更大的文件时,不会命中这些断点。因此,某些地方的其他代码必须使用不同的限制来强制执行最大大小。

此时我陷入了困境,因为我一直在尝试找到所有的建议。

正文到此结束
热门推荐
本文目录