SpringBoot设置全局捕获MaxUploadSizeExceededException异常

人生之路坎坎坷坷,跌跌撞撞在所难免。但是,不论跌了多少次,你都必须坚强勇敢地站起来。任何时候,无论你面临着生命的何等困惑抑或经受着多少挫折,无论道路多艰难,希望变得如何渺茫,请你不要绝望,再试一次,坚持到底,成功终将属于勇不言败的你。

导读:本篇文章讲解 SpringBoot设置全局捕获MaxUploadSizeExceededException异常,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

需求:在Spring Boot项目中对来自前端的文件上传请求做大小限制,限制文件大小在20mb以内,超出则提示“文件大于20mb”

自定义全局异常 相应代码

@ExceptionHandler({MaxUploadSizeExceededException.class})
    public JsonResult maxUploadSizeExceededException(MaxUploadSizeExceededException maxUploadSizeExceededException) {
        log.info("=====================文件大于50mb====================");
        log.info(maxUploadSizeExceededException+"");
        return new JsonResult("40075","文件大于50mb");
    }

yml配置

spring:
  servlet:
    multipart:
      max-file-size: 20mb
      max-request-size: 20mb

结果报错

org.springframework.web.multipart.MaxUploadSizeExceededException:
 Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: 
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: 
the request was rejected because its size (10935680) exceeds the configured maximum (10485760)
百度好多资料,说是超出tomcat内置的文件大小设置异常会先于controller触发导致异常无法捕获

按照百度提供的解决方案:配置yml

spring:
  servlet:
    multipart:
      enabled: true #默认支持文件上传
      max-file-size: 20mb
      max-request-size: 20mb
      resolve-lazily: true #设置为懒加载,不然依然会捕获不到异常
    tomcat:
      max-swallow-size: 100MB #最重要的是这行

结果依然不可以,有一点奇怪的是

在这里插入图片描述

这里可以打印,说明可以触发异常的,都是前端响应结果

在这里插入图片描述

前端使用的是Vue,axios

this.$axios({
                    method:"post",
                    url:"/imgUpDown",
                    data:formData,
                    headers: {'Content-Type': 'multipart/form-data'}
                }).then(res => {
                    console.log("响应成功:服务端返回值为:",res)
                    
                }).catch(e=>{
                    console.log("请求失败:错误信息:",e)
                   
                })

前端就是不响应自己封装的结果

…三个小时以后。。。

来自厕所的灵感

不限制文件上传大小,自己判断文件大小

yml配置文件

spring:
  servlet:
    multipart:
      enabled: true #默认支持文件上传
      max-file-size: -1
      max-request-size: -1
      resolve-lazily: true #设置为懒加载,不然依然会捕获不到异常
    tomcat:
      max-swallow-size: 100MB #最重要的是这行

自己判断代码

@RequestMapping(value = "imgUpDown",method = {RequestMethod.POST})
    @CrossOrigin
    @ApiOperation(value = "文件上传")
    public JsonResult imgUpDown(@RequestPart("file") MultipartFile file) throws IOException {

        if (file.isEmpty()) return new JsonResult("40072","文件不能为空");

        System.out.println(file.getSize() / (1024*1024));
        if ((file.getSize() / (1024*1024)) > 20 ) return new JsonResult("40073","文件大于20mb");

        String imgUrl = ImgUpDown.imgUpDown(file, domainName.getDomainName());
        Img img = new Img();
        img.setImgUrl(imgUrl);
        imgService.saveImg(img);
        return new JsonResult(imgUrl,"200","图片上传成功");
    }

成功

在这里插入图片描述

事实再次证明:只要思想不滑坡,方法总比困难多

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/133781.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!