tomcat默认文件上传大小限制是2mb,由maxpostsize和maxswallowsize参数共同控制,二者默认均为2097152字节,超限请求直接返回http 400且不进入应用逻辑。

Tomcat默认文件上传大小限制是多少
Tomcat本身不通过环境变量控制上传大小,而是由Servlet容器层的maxPostSize和maxSwallowSize参数决定,默认值均为2MB(即2097152字节)。超过这个大小的POST请求(含文件上传)会被直接拒绝,返回HTTP 400错误,且不会进入应用代码逻辑。
如何修改maxPostSize和maxSwallowSize
这两个参数必须在conf/server.xml中修改,作用于<connector></connector>标签。常见错误是试图用CATALINA_OPTS或JAVA_OPTS去设置——它们只影响JVM启动参数,对上传限制完全无效。
-
maxPostSize:限制整个POST请求体的总字节数(含表单字段+文件),设为-1表示不限制(慎用) -
maxSwallowSize:限制Tomcat在关闭连接前最多读取并丢弃的请求体字节数,防止恶意大请求耗尽资源;默认-1(不限),但若设为0则跳过读取,可能引发客户端超时 - 两者需同时调整,否则可能出现“请求被截断但没报错”或“400却无日志”的诡异现象
示例配置(在<connector port="8080"></connector>内添加):
<connector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443" maxpostsize="10485760" maxswallowsize="10485760"></connector>
上面配置允许最大10MB上传(10 * 1024 * 1024 = 10485760)。
Spring Boot内嵌Tomcat怎么调
如果你用的是Spring Boot(非独立Tomcat部署),server.xml不存在,必须改application.yml或application.properties:
server:
tomcat:
max-swallow-size: 10MB
max-http-post-size: 10MB
注意:max-http-post-size对应Tomcat的maxPostSize,max-swallow-size对应maxSwallowSize。单位支持KB/MB,比原始XML更友好。但别写成maxPostSize——Spring Boot不识别驼峰命名。
为什么改了还是上传失败
上传失败常不是Tomcat单方面的问题,容易忽略的环节有:
- 前端form未设
enctype="multipart/form-data",导致文件被当普通字符串提交 - 反向代理(如Nginx)自身有限制:
client_max_body_size必须同步放大,否则请求根本到不了Tomcat - 应用框架拦截:Spring MVC的
MultipartConfigElement或spring.servlet.multipart.max-file-size等配置优先级更高,会覆盖Tomcat层设置 - Linux系统级限制:
/proc/sys/net/core/wmem_max等内核参数极低时,大包可能被底层丢弃(少见但真实存在)
最稳妥的排查路径:先关掉所有代理和框架中间件,用curl -F "file=@test.zip" http://localhost:8080/upload直连Tomcat验证,再逐层加回组件。











