需求:在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