Spring Boot 3文件上传配置报错:maxPostSize超限问题求助
Spring Boot 3 文件上传限制正确配置方案
报错根源
你遇到的maxPostSize相关报错,是因为Tomcat 10+(Spring Boot 3默认使用)已废弃server.tomcat.max-http-post-size参数,改用server.tomcat.max-http-form-post-size控制表单POST参数(非文件部分)的大小,旧参数自然不生效。同时EmbeddedServletContainerCustomizer在Spring Boot 2.x之后已被WebServerFactoryCustomizer替代,所以你找不到该类。
正确配置方案
1. 配置文件方式(推荐)
根据你的需求,修改application.yml或application.properties:
application.yml
spring: servlet: multipart: max-file-size: 20MB # 单个上传文件的最大大小 max-request-size: 100MB # 整个请求(含文件+表单参数)的最大大小 server: tomcat: max-http-form-post-size: 100MB # 表单参数(非文件部分)的最大大小,建议和max-request-size保持一致 max-swallow-size: -1 # 允许Tomcat处理超过限制的请求,-1表示无限制,避免连接重置
application.properties
spring.servlet.multipart.max-file-size=20MB spring.servlet.multipart.max-request-size=100MB server.tomcat.max-http-form-post-size=100MB server.tomcat.max-swallow-size=-1
2. 代码自定义配置(更灵活)
如果需要通过代码精细控制Tomcat容器,使用WebServerFactoryCustomizer替代废弃的类:
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatUploadConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> { @Override public void customize(TomcatServletWebServerFactory factory) { factory.addConnectorCustomizers(connector -> { // 设置表单参数最大大小,100MB = 1024*1024*100 = 104857600字节 connector.setAttribute("maxHttpFormPostSize", 104857600); // 禁用请求大小吞入限制,避免连接异常断开 connector.setAttribute("maxSwallowSize", -1); }); } }
注意事项
max-http-form-post-size建议与spring.servlet.multipart.max-request-size保持一致,避免出现参数部分超限但整体请求未超限的矛盾。max-swallow-size设为-1是为了防止Tomcat在处理大请求时直接关闭连接,生产环境可根据实际业务调整,但一般建议设为-1或大于请求最大限制的值。- 确保项目依赖中包含
spring-boot-starter-web,它会自动引入Tomcat嵌入式容器依赖,否则相关配置类可能无法找到。
内容的提问来源于stack exchange,提问作者Cjxcz Odjcayrwl
相关产品推荐
相关产品推荐

