Spring Boot 项目传文件时,如果不单独设置大小,默认最大1Mb,会报这个错:
2020-01-05 10:42:06.524 WARN 17840 ---
[io-8080-exec-10] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException:
org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException:
The field editormd-image-file exceeds its maximum permitted size of 1048576 bytes.]
这个意思就是上传的文件超出了其最大允许大小1048576字节
解决办法就是,根据自己业务需求设置合适的文件上传大小限制
目录
配置文件配置示例
全局异常捕获
配置文件配置示例
设置方法示例:
1. 首先在配置文件中添加配置参数,以下两种配置二选一
如果你的配置文件是在application.properties中,则配置如下:
#单个文件最大大小
spring.servlet.multipart.max-file-size=10MB
#所有上传文件最大大小
spring.servlet.multipart.max-request-size=100MB
如果是application.yml,则配置如下:
spring:
servlet:
multipart:
max-file-size: 100MB #单个文件最大
max-request-size: 200MB #单个请求文件总和最大
server:
tomcat:
max-swallow-size: 200MB #重要的一行,修改tomcat的吞吐量
全局异常捕获
虽然配置了大小,但是超长以后报的错不友好,配置全局异常处理
/**
* @Author
* @Date 2023/5/25 11:12
* @Description: 全局异常处理器
*/
@RestControllerAdvice
public class GlobalExceptionHandlerResolver {
private final static Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandlerResolver.class);
/**
* 文件上传超过最大限制异常
*
* @return R
*/
@ExceptionHandler(value = MultipartException.class)
public @ResponseBody
Result handleBusinessException(MaxUploadSizeExceededException ex) {
String msg;
if (ex.getCause().getCause() instanceof FileSizeLimitExceededException) {
LOGGER.error(ex.getMessage());
msg = ResultCode.EXCEED_FILE_MAX + "[单文件大小不得超过100M]";
} else if (ex.getCause().getCause() instanceof SizeLimitExceededException) {
LOGGER.error(ex.getMessage());
msg = ResultCode.EXCEED_FILE_MAX + "[总上传文件大小不得超过200M]";
} else {
msg = ResultCode.FILE_UPLOAD_FAILURE + "请检查文件类型及大小是否符合规范";
}
return new Result("401", msg, null);
}
}
到此就大功告成,大小得到了限制,报错也友好
此时项目设置基本可以实现大文件上传了
如果你是吧文件上传进MySQL存储的话会有新的问题,MySQL一次执行文件过大也会报错,此时需要修改MySQL默认参数 max_allowed_packet
修改方法可见我的另一篇文章
Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large_小田资料库的博客-CSDN博客