SpringBoot 项目文件上传过大报错不返回解决方案

我在开发时文件上传接口时, 测试过程中发现, 上传文件过大时虽然全局异常捕获到了, 但是异常处理结果不返回到前端。
后台报错:

2019-10-12 10:09:02.881 [http-nio-8989-exec-10] ERROR com.szjk.file.exception.GlobalExceptionHandler - 异常: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 (80405163) exceeds the configured maximum (10485760)
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 (80405163) exceeds the configured maximum (10485760)
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:121)
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:114)
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:87)
	at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:87)
	at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1176)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1011)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (80405163) exceeds the configured maximum (10485760)
	at org.apache.catalina.connector.Request.parseParts(Request.java:2899)
	at org.apache.catalina.connector.Request.parseParameters(Request.java:3194)
	at org.apache.catalina.connector.Request.getParameter(Request.java:1116)
	at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:381)
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:84)
	... 24 more
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (80405163) exceeds the configured maximum (10485760)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:808)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)
	at org.apache.catalina.connector.Request.parseParts(Request.java:2855)
	... 28 more

且接口调用没有异常处理结果,在这里插入图片描述解决办法如下:

只需要在项目application.yml中配置:

server:
  tomcat:
    max-swallow-size: -1 #内置tomcat限制文件最大大小   -1为不限制
spring:
  servlet:
    multipart:
      max-file-size: 20MB   #单文件最大限制
      max-request-size: 200MB #总文件最大限制

配置好后,上传文件超过限制,异常正常捕获并返回可接口调用端
在这里插入图片描述
然后满心欢喜,打包运行在tomcat中(tomcat9), 哦豁, 报错,
tomca9中日志报错信息如下:
2019-10-12 09:41:21.384 [http-nio-8080-exec-8] ERROR com.szjk.file.exception.GlobalExceptionHandler - 异常:Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase F i l e S i z e L i m i t E x c e e d e d E x c e p t i o n : T h e f i e l d f i l e e x c e e d s i t s m a x i m u m p e r m i t t e d s i z e o f 20971520 b y t e s . 2019 − 10 − 1209 : 41 : 22.348 [ h t t p − n i o − 8080 − e x e c − 9 ] E R R O R c o m . s z j k . f i l e . e x c e p t i o n . G l o b a l E x c e p t i o n H a n d l e r − 异 常 : M a x i m u m u p l o a d s i z e e x c e e d e d ; n e s t e d e x c e p t i o n i s j a v a . l a n g . I l l e g a l S t a t e E x c e p t i o n : o r g . a p a c h e . t o m c a t . u t i l . h t t p . f i l e u p l o a d . F i l e U p l o a d B a s e FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 20971520 bytes. 2019-10-12 09:41:22.348 [http-nio-8080-exec-9] ERROR com.szjk.file.exception.GlobalExceptionHandler - 异常:Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase FileSizeLimitExceededException:Thefieldfileexceedsitsmaximumpermittedsizeof20971520bytes.2019101209:41:22.348[httpnio8080exec9]ERRORcom.szjk.file.exception.GlobalExceptionHandlerMaximumuploadsizeexceeded;nestedexceptionisjava.lang.IllegalStateException:org.apache.tomcat.util.http.fileupload.FileUploadBaseFileSizeLimitExceededException: The field file exceeds its maximum permitted size of 20971520 bytes.
2019-10-12 09:41:23.335 [http-nio-8080-exec-10] ERROR com.szjk.file.exception.GlobalExceptionHandler - 异常:Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 20971520 bytes.

然后搜索解决方案。。。。
网上说在tomcat的server.xml 文件中 <Connector 配置 maxPostSize="-1" 。
不行不行不行。。。。。
还试了其他的方法
还是不行

最后快放弃的时候,想到既然springboot项目运行在内置的tomcat中配置 max-swallow-size=-1 就可以了,那么试试在tomcat的server.xml文件中配置maxSwallowSize="-1"。果然,application.yml 中的max-swallow-size 参数驼峰命名后配置到<Connector 中。运行tomcat, 上传文件超过限制,异常正常捕获并返回可接口调用端 。 配置如下:![在这里插入图片描述])
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值