UAT配置环境下无法覆盖Tomcat默认文件上传大小限制问题咨询
排查与解决步骤
优先检查虚拟机反向代理限制
你提到请求没有进入Spring控制器,UAT环境部署在虚拟机中,大概率虚拟机前置了Nginx/Apache等反向代理,这类代理默认的请求体大小限制就是1MB,超出后直接返回错误,不会转发到后端服务。
如果是Nginx,在配置文件中对应server或location块添加client_max_body_size 25M;,重启Nginx即可生效;如果是Apache,修改LimitRequestBody参数为26214400(25MB对应的字节数)。确认UAT配置是否正确加载
很多时候配置不生效是因为profile没有被正确激活,你可以通过以下方式验证:
- 启动UAT应用时添加
--debug启动参数,查看控制台输出的配置加载顺序,确认application-uat.properties被正常加载 - 直接在启动类中添加代码打印
spring.servlet.multipart.max-file-size和spring.servlet.multipart.max-request-size的实际值,确认是否为你配置的25MB,避免被配置中心、环境变量等更高优先级的配置覆盖。
适配外置Tomcat的配置(如果适用)
如果你UAT环境是将Spring Boot应用打包成war包部署到外置Tomcat,而非使用内置Tomcat启动,需要单独修改Tomcat的配置:
打开Tomcat/conf/server.xml,找到对应的Connector节点,添加maxSwallowSize="26214400"配置,重启Tomcat生效。
如果使用内置Tomcat,可直接在配置文件中添加server.tomcat.max-swallow-size=25MB确保Tomcat层面的限制放开。解决小文件UnsupportedMediaType报错
小文件上传返回415错误的常见原因如下:
- 确认后端上传接口的
@PostMapping注解是否显式指定了consumes = MediaType.MULTIPART_FORM_DATA_VALUE,如果配置了其他类型的消费规则会直接返回415 - 抓包验证前端上传请求的
Content-Type头是否为multipart/form-data; boundary=xxx格式,你当前的Angular代码没有手动设置Content-Type是正确的(FormData会自动让浏览器生成带boundary的正确头,手动设置反而会导致boundary缺失报错),如果确认头异常可检查是否有全局拦截器强制修改了请求头。
- 额外补充配置
可以在配置文件中显式添加spring.servlet.multipart.enabled=true,虽然Spring Boot默认开启文件上传支持,避免部分场景下该配置被意外关闭。
内容的提问来源于stack exchange,提问作者Maz
相关产品推荐
相关产品推荐

