Spring Boot 项目上传文件时,文件过大报错解决一站式办法(含:最大值设置,全局异常捕获)

        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博客

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了全局异常处理机制,可以通过以下几个步骤搭建全局异常捕获。 1. 创建一个全局异常处理类,使用@ControllerAdvice注解标记该类为全局异常处理类,并使用@ExceptionHandler注解定义要捕获异常类型。 2. 在全局异常处理类中编写异常处理方法,通过@ExceptionHandler注解标注,指定要捕获异常类型。在方法中可以定义异常处理的逻辑,比如返回自定义的误信息、记录日志等。 3. 如果要返回自定义的误信息,可以创建一个自定义的返回结果类,用于封装误信息。在异常处理方法中将误信息封装到自定义的返回结果类中,并将其返回给前端。 4. 使用@ControllerAdvice注解标记的全局异常处理类,会自动将其注册为bean,并作为全局异常处理器生效。 下面是一个简单的示例代码: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleException(Exception ex) { ErrorResponse error = new ErrorResponse(); error.setMessage("系统内部误"); error.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR); } } public class ErrorResponse { private String message; private int status; // 省略getter和setter方法 } ``` 在上述示例中,我们通过@ControllerAdvice注解标记了一个全局异常处理类GlobalExceptionHandler,并通过@ExceptionHandler注解定义了handleException方法,用于捕获Exception类型的异常。在方法中,我们创建了一个ErrorResponse对象,并将误信息封装到该对象中返回给前端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值