Tomcat默认上传限制为2MB,即单个文件和整个表单总大小均不得超过2097152字节;该限制源于Servlet 3.0+内置multipart解析器的maxFileSize与maxRequestSize默认值。

Tomcat默认上传限制是多少
Tomcat本身不直接限制XML文件(或任何文件)上传大小,真正起作用的是Servlet容器对multipart/form-data请求的解析限制。从Tomcat 8.5开始,默认使用内置的StandardMultipartResolver,其maxFileSize和maxRequestSize默认均为2MB(即2097152字节)。这意味着:单个文件超2MB,或整个表单(含多个文件、文本字段)总大小超2MB,都会触发400 Bad Request或java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException错误。
修改web.xml配置(适用于Servlet 3.0+应用)
这是最常用、也最推荐的方式,无需改Tomcat全局配置,只影响当前Web应用。需在应用的WEB-INF/web.xml中添加<multipart-config></multipart-config>节点:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<p><servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<max-file-size>52428800</max-file-size> <!-- 50MB -->
<max-request-size>52428800</max-request-size> <!-- 50MB -->
<file-size-threshold>0</file-size-threshold> <!-- 直接写入磁盘,不缓存到内存 -->
</multipart-config>
</servlet></p><p><servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping></p><p></web-app>注意:<multipart-config></multipart-config>必须放在<servlet></servlet>内,且该servlet必须是实际处理文件上传的入口(如Spring MVC的DispatcherServlet)。如果用的是其他框架(如Struts2),要确保对应servlet被配置。
Spring Boot项目怎么配(application.properties/yml)
Spring Boot 2.0+已弃用spring.http.multipart.*,统一使用spring.servlet.multipart.*。若上传的是XML文件,仍需确保后端接收逻辑(如@RequestParam("file") MultipartFile file)能正常绑定:
spring.servlet.multipart.max-file-size=50MB spring.servlet.multipart.max-request-size=50MB spring.servlet.multipart.file-size-threshold=0
常见坑点:
- 单位写错:支持
MB、KB、B,但不能写mb(大小写敏感) - 配置位置错误:必须放在
application.properties(或application.yml),不能写在logback-spring.xml等无关配置里 - 与Nginx共存时:若前端有Nginx反向代理,还需同步设置
client_max_body_size,否则请求根本到不了Tomcat
为什么改了配置还是报400?排查关键点
上传失败却不报具体异常,往往是因为错误被静默吞掉或返回了通用HTTP状态码。重点检查以下几处:
- 确认请求Content-Type确实是
multipart/form-data,且boundary格式合法;XML文件名含中文或特殊字符时,需确保前端用encodeURIComponent或设置Content-Disposition的filename*=编码 - 查看Tomcat日志(
logs/catalina.out或localhost.<date>.log</date>),搜索SizeLimitExceededException——如果没出现,说明限制没生效或根本没走到Servlet解析阶段 - Spring应用中,若自定义了
MultipartResolver(如CommonsMultipartResolver),则web.xml或@Bean里的配置会覆盖默认行为,此时应优先检查该Bean的maxUploadSize属性 - Java启动参数中设置了
-Dorg.apache.catalina.connector.RECYCLE_FACADES=true可能导致部分异常堆栈丢失,临时关闭有助于定位
XML文件本身没有特殊上传路径,它和TXT、ZIP一样受同一套multipart限制约束;真正容易被忽略的是:当XML作为text/xml直接POST(非form-data)时,走的是请求体读取流程,此时限制来自maxHttpHeaderSize或maxPostSize(server.xml中Connector配置),而非multipart配置。


















