Spring Boot 内置 Tomcat 默认单文件上传限制为 1MB、总请求 10MB;XML 因结构冗余易超限,触发 FileSizeLimitExceededException;需在 application.yml 中配置 spring.servlet.multipart.max-file-size 等参数,或通过 MultipartConfigElement Bean 动态设置,并注意外部 Tomcat 的 maxPostSize 及云网关限制。

Spring Boot 默认上传限制是多少?为什么 XML 文件常踩坑
Spring Boot 内置 Tomcat 默认只允许单文件 ≤ 1MB(即 1048576 字节),整个请求 ≤ 10MB。XML 文件虽是文本,但带命名空间、缩进、注释或嵌套结构时,很容易超过 1MB——比如一个导出的财务报表 XML 或 CAD 元数据 XML,动辄几 MB。一旦超限,你会看到这类错误:org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException 或 MaxUploadSizeExceededException。
application.yml 中最简配置方式(推荐初试/运维快速生效)
这是修改成本最低、见效最快的方案,适用于大多数标准部署场景。注意:Spring Boot 2.0+ 统一使用 spring.servlet.multipart.* 前缀,旧版 spring.http.multipart.* 已废弃,用错会静默失效。
spring:
servlet:
multipart:
enabled: true
max-file-size: 20MB
max-request-size: 50MB
file-size-threshold: 2MB-
max-file-size:单个 XML 文件上限,设为20MB可覆盖绝大多数业务 XML -
max-request-size:整个 HTTP 请求体总大小,含多个文件 + 表单字段,建议 ≥ 单文件限制 × 并发数预估 -
file-size-threshold:≤ 该值的文件直接存内存,否则写临时磁盘;设2MB可避免小 XML 频繁 IO,但别设太高(如 >10MB),否则 GC 压力大
Java 配置类方式(适合需要动态控制或兼容老版本)
当你要根据环境(dev/test/prod)差异化设置,或集成自定义拦截逻辑(如按用户角色限流),用 @Configuration + MultipartConfigElement 更灵活。注意:该 Bean 必须在 Spring 容器启动早期注册,否则无效。
import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.unit.DataSize;import javax.servlet.MultipartConfigElement;
魔法映像企业网站管理系统下载技术上面应用了三层结构,AJAX框架,URL重写等基础的开发。并用了动软的代码生成器及数据访问类,加进了一些自己用到的小功能,算是整理了一些自己的操作类。系统设计上面说不出用什么模式,大体设计是后台分两级分类,设置好一级之后,再设置二级并选择栏目类型,如内容,列表,上传文件,新窗口等。这样就可以生成无限多个二级分类,也就是网站栏目。对于扩展性来说,如果有新的需求可以直接加一个栏目类型并新加功能操作
@Configuration public class UploadConfig {
@Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setMaxFileSize(DataSize.ofMegabytes(20)); factory.setMaxRequestSize(DataSize.ofMegabytes(50)); // ⚠️ 不要用字符串如 "20MB",低版本 Spring Boot 会解析失败 return factory.createMultipartConfig(); }}
- 必须用
DataSize.ofMegabytes()等类型安全方法,避免字符串解析歧义(如"20mb"vs"20MB") - 如果项目用了 Undertow 或 Jetty,此配置不生效——它们不认
MultipartConfigElement,得查对应服务器文档 - 若同时存在
application.yml和该 Bean,Bean 优先级更高,但容易引发配置冲突,建议二选一
别漏掉外部 Tomcat 的 maxPostSize(上线前必查)
如果你把 Spring Boot 打成 war 包部署到独立 Tomcat(非内嵌),application.yml 的配置只管 Spring 层,Tomcat 自己还会校验 maxPostSize。默认是 2MB,比 Spring 还严——这时即使 Spring 放开了,请求也卡在容器层,报错无提示或直接 400。
-
maxPostSize单位是**字节**,不是 MB,50 * 1024 * 1024 = 52428800,手算易错,建议写注释 - 改完
server.xml后必须重启 Tomcat,热加载不生效 - 云环境(如阿里云 EDAS、腾讯 TKE)可能有网关层额外限制(如 API 网关默认 10MB),需同步确认
真正上线前,拿一个真实大小的 XML 文件(比如 18MB 的 ISO 20022 报文)走一遍上传链路,别只测 2MB。很多问题出在“配置写了但没生效”或者“多层网关叠加限制”,而不是代码本身。










