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

news/2024/11/9 21:10:00 标签: spring boot, java, spring

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


http://www.niftyadmin.cn/n/454472.html

相关文章

编译原理笔记13:自上而下语法分析(3)构造预测分析表、LL(1) 文法

目录 构造预测分析表不懂也能用的构造步骤FIRST、FOLLOW 和分析表的原理? LL(1) 文法 构造预测分析表 预测分析表的作用,是为推导的进行指明方向——我们用当前下推栈栈顶和读写头所指向的符号的组合(即当前的状态),去…

VS调试时无响应,卡顿,卡死的解决方案

1.修改体调试设置 调试->选项->调试->符号;去掉xxx服务器,勾选仅加载指定的模块 2.修改搜狗输入法 3.由于VS运行太久缓存太多。 1.单击“开始”,选择“运行...”,或者winr快捷键 2.键入“devenv.exe /resetuserdata”。 此命令…

uniapp 前端定时刷新token,接口排队等待,promise 接口封装

一、需求 此项目为小程序。小程序完成第一版token刷新设计思路是:根据接口调用返回的errorCode来判断当前用户的token和refreshToken是否过期。根据不同的errorCode,前端去调用接口完成token的刷新或者跳转到登录页面重新登录。 由于小程序的用户功能权限…

Spring Boot 中自定义数据校验注解

Spring Boot 中自定义数据校验注解 在 Spring Boot 中,我们可以使用 JSR-303 数据校验规范来校验表单数据的合法性。JSR-303 提供了一些常用的数据校验注解,例如 NotNull、NotBlank、Size 等。但是,在实际开发中,我们可能需要自定…

Linux中centos修改系统时间并写到硬件,Linux中centos设置定时自动同步网络时间

文章目录 前言一、centos修改系统时间并写到硬件1.1查看当前的系统时间1.2修改系统时间1.3查看硬件时间1.4同步系统时间和硬件时间1.5本地时间写入硬件时间 二、centos设置定时自动同步网络时间2.1安装ntpdate工具2.2CentOS安装/操纵crontab2.3启动crontab并查看状态2.4写一个c…

【头歌-Python】Python第七章作业(初级)

第1关:字符串去重排序 任务描述 输入一个非空字符串,去除重复的字符后,从小到大排序输出为一个新字符串。 输入格式 一个非空字符串 输出格式 去重排序后的字符串 示例 输入: Life is short, you need Python!输出&#…

史上最大图灵测试实验完成150万人类参与1000万次对话,判断对面是人还是AI

本文 介绍 了AI 21实验室推出了一个好玩的社交图灵游戏——「人类还是机器人?」 【导读】这个「人类还是AI?」的游戏一经推出,就被广大网友们玩疯了!如今全世界已有150万人参与,网友们大方分享自己鉴AI的秘诀。 历上规模最大的…

Mysql高阶语句(一)

Mysql高阶语句(一) 一、MySQL高级进阶SQL 语句1、SELECT斜体样式2、DISTINCT3、WHERE4、AND、OR5、IN6、BETWEEN7、通配符、LIKE8、ORDER BY9、| | 连接符10、GROUP BY11、HAVING 二、函数1、数学函数2、聚合函数3、字符串函数4、日期时间函数 一、MySQL…