2025.6.26
这个警告日志 Resolved [org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded] 表示 Spring 框架在处理文件上传时,检测到上传的文件大小超过了系统配置的最大限制,触发了 MaxUploadSizeExceededException 异常。以下是具体分析和解决方案:
原因分析
-
默认限制
Spring Boot 默认的文件上传大小限制为:- 单个文件:
1MB(1048576 字节) - 单次请求(含多个文件):
10MB
超过任一限制都会触发此异常。
- 单个文件:
-
底层机制
- 异常由
MultipartResolver(如StandardServletMultipartResolver或CommonsMultipartResolver)抛出,通常在解析请求时校验文件大小。 - 如果使用 Tomcat 服务器,还需注意
maxSwallowSize配置(默认 2MB),超过此值可能导致请求被直接拒绝,而非触发 Spring 的异常处理。
- 异常由
解决方案
1. 修改 Spring Boot 配置
在 application.properties 或 application.yml 中调整文件大小限制:
# 设置单个文件最大为 50MB,请求整体最大为 100MB
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=100MB
或 YAML 格式:
spring:
servlet:
multipart:
max-file-size: 50MB
max-request-size: 100MB
注意:
- 高版本 Spring Boot(2.x+)使用
spring.servlet.multipart,低版本(1.x)使用spring.http.multipart。 - 单位支持
KB``MB``GB等。
2. Tomcat 服务器配置
如果使用内嵌 Tomcat,需额外配置 max-swallow-size(默认 2MB),避免请求被 Tomcat 提前拦截:
server.tomcat.max-swallow-size=-1 # 不限制,或设置为足够大的值(如 100MB)
或在 server.xml 中修改(外部 Tomcat):
<Connector port="8080" maxSwallowSize="-1" ... />
3. 自定义异常处理
通过 @ControllerAdvice 捕获异常并返回友好提示:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MaxUploadSizeExceededException.class)
public ResponseEntity<String> handleUploadSizeExceeded() {
return ResponseEntity.badRequest().body("文件大小超过限制!");
}
}
4. 临时目录问题
如果报错包含 The temporary upload location is not valid,可能是系统清理了临时目录。需通过配置固定临时路径:
spring.servlet.multipart.location=/data/tmp
或通过 MultipartConfigElement Bean 指定。
其他注意事项
- Nginx 反向代理:若前端使用 Nginx,需检查
client_max_body_size配置(默认 1MB),避免请求被 Nginx 拦截。 - 文件类型校验:可通过工具类(如 Hutool)检查文件类型和实际字节头,避免伪造扩展名。
总结
该警告表明文件上传大小超限,需通过 Spring 配置****Tomcat 参数 和 异常处理 综合解决。若问题持续,需检查上下游(如 Nginx临时目录)的配置。

浙公网安备 33010602011771号