我正在将 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 和其他文章,包括:
弹簧启动启动器
此时我陷入了困境,因为我已经尝试了我能找到的所有建议。
事实证明,从浏览器到后端服务的路径经过另一个服务,该服务配置为允许 25MB 上传,但在开发模式下运行时不允许 - 这就是我正在测试的方式。因此该服务将文件上传大小限制为 1MB,并产生错误。这就解释了为什么:
我无法在后端服务中的错误上设置断点