spring boot 中文件超限抛出 maxuploadsizeexceededexception,需配置 multipart 大小限制、全局异常处理及前端校验。

在 Spring Boot 项目中,当用户上传的文件超过配置限制时,会抛出 MaxUploadSizeExceededException。这不是运行时异常,而是 Spring 的特定异常,需要显式捕获或配置全局处理机制。
配置上传大小限制(基础前提)
必须先明确设置合理的上传上限,否则默认值极小(如 Tomcat 默认 1MB),极易触发异常:
- Spring Boot 2.0+ 推荐在
application.yml中统一配置:
servlet:
multipart:
max-file-size: 50MB
max-request-size: 50MB
注意:max-file-size 控制单个文件大小,max-request-size 控制整个请求(如多文件 + 表单字段)总大小,两者都要设。
全局异常处理器捕获该异常
使用 @ControllerAdvice 拦截并返回友好提示,避免暴露堆栈或 500 页面:
- 定义一个异常处理器类,添加
@ExceptionHandler(MaxUploadSizeExceededException.class) - 返回 JSON 响应(如
ResponseEntity或封装的 Result 对象) - 建议包含具体限制值(可从异常中获取
getMaxUploadSize())和用户可读提示
示例响应体:{"code":400,"msg":"文件大小不能超过 50MB,请压缩后重试"}
前端配合做前置校验
服务端限制是兜底,前端应在提交前检查文件大小,提升体验:
- HTML input 元素选择文件后,用 JavaScript 读取
file.size(单位字节) - 与后端配置的上限(如 52428800)对比,超限则直接提示,不发起请求
- 注意:浏览器限制无法绕过,但能减少无效请求和用户等待
特殊场景:动态调整或忽略限制
极少数情况需临时放宽(如运维后台上传日志),不推荐生产环境常规使用:
- 通过
MultipartConfigFactory编程式配置 Servlet 容器(如 Tomcat)的 multipart 限制 - 对特定接口禁用 multipart 解析(改用
InputStream手动读取原始请求体),但会丢失表单字段解析能力 - 务必评估安全风险——过大上传可能引发内存溢出或 DoS 攻击
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











