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

问题描述 投票:0回答:1

我正在将 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 和其他文章,包括:

弹簧启动启动器

    spring-boot-starter-actuator
  • spring-boot-starter-hateoas
  • spring-boot-starter-data-jpa
  • spring-boot-starter-data-rest
  • ...并自动包含嵌入式 Tomcat 10.1.17。
我跟踪了Tomcat代码,并在Request.parseParts()和FileUploadBase.setSizeMax()处设置了断点。有趣的是,当我上传小于 1MB 的文件时,会遇到断点,并且最大文件大小是我配置的值。当我上传较大的文件时,不会命中这些断点。因此,某处的其他代码必须使用不同的限制来强制执行最大大小。

此时我陷入了困境,因为我已经尝试了我能找到的所有建议。

事实证明,从浏览器到后端服务的路径经过另一个服务,该服务配置为允许 25MB 上传,但在开发模式下运行时不允许 - 这就是我正在测试的方式。因此该服务将文件上传大小限制为 1MB,并产生错误。这就解释了为什么:
java spring-boot tomcat multipart
1个回答
0
投票

我无法在后端服务中的错误上设置断点

    在我的后端服务中查找问题的日志记录和其他技术对于此问题没有用
  • 在生产中上传较大文件时没有任何问题
  • 谢什!

© www.soinside.com 2019 - 2024. All rights reserved.