使用spring上传文件超出指定大小会抛出 MaxUploadSizeExceededException 异常。

我们首先会想到捕获异常,然后处理:


但是当文件大小超出后,自己写的全局异常处理@ControllerAdvice类虽说能捕获到MaxUploadSizeExceededException 异常,但是并不能成功处理异常指定到我们想要的返回状态码和错误信息以及跳转指定的错误页面,而是直接报 500 错误了,经过DeBug发现该异常方法被多次调用。返回页面出现以下


百度一下,发现:当上传文件超 tomcat 的大小限制后会先于 Controller触发异常,所以这时我们的异常处理类无法捕获 Controller 层的异常。

此时我们需要设置tomcat 的最大吞吐量即 max-swallow-size,可以设置 -1 不限制,也可以设置一下比较大的数字


如果是Spring Boot项目们只需要在application.properties中添加:

spring.servlet.multipart.max-file-size = 50MB
spring.servlet.multipart.max-request-size = 50MB
server.tomcat.max-swallow-size = 100MB # 最重要的是这一行


如果使用外置tomcat容器,那么就修改conf目录下的server.xml文件:

找到Connector节点,增加maxSwallowSize="-1"的配置


如此,成功解决MaxUploadSizeExceededException异常。