首页 > 其他分享 >[springboot] 上传文件时,报"org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException

[springboot] 上传文件时,报"org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException

时间:2023-05-13 23:13:19浏览次数:47  
标签:fileupload java ApplicationFilterChain catalina org apache http permitted

1 问题描述

基于springmvc / springbootMultipartFile接口实现上传文件功能时,报如下错误日志

[2023/05/13 22:31:54.732] [TID: N/A] [INFO ] [http-nio-8769-exec-5] [AccessPathWebFilter.java:85 doFilter] [3-4] request-path: http://love.pfr.kim/user-service/v1/file-resource/upload-file-resource
[2023/05/13 22:31:54.732] [TID: N/A] [INFO ] [http-nio-8769-exec-5] [AccessPathWebFilter.java:86 doFilter] request.header: {remote-host=xx.yy.zz.gg, content-length=1080242, referer=http://192.168.1.2:8020/, x-forwarded-proto=http, accept-language=zh-CN,zh;q=0.9, origin=http://192.168.1.2:8020, sign=8dfb05b7548da231df58d1741ff19af2, x-forwarded-port=8020, x-forwarded-for=192.168.1.2, 120.229.208.65, access-token=d411711e1b8ed5407567c7f0847b5963, current-time=1683988316194, accept=*/*, x-real-ip=xx.yy.zz.gg, x-forwarded-host=192.168.1.2:8020, host=love.pfr.kim, connection=close, content-type=multipart/form-data; boundary=----WebKitFormBoundary2qUYD5tdQtlNtgDF, accept-encoding=gzip, deflate, user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1}
May 13, 2023 10:31:54 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field uploadFile exceeds its maximum permitted size of 1048576 bytes.] with root cause
org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field uploadFile exceeds its maximum permitted size of 1048576 bytes.
	at org.apache.tomcat.util.http.fileupload.impl.FileItemStreamImpl$1.raiseError(FileItemStreamImpl.java:114)
	at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76)
	at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135)
	at java.io.FilterInputStream.read(FilterInputStream.java:107)
	at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:98)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:291)
	at org.apache.catalina.connector.Request.parseParts(Request.java:2922)
	at org.apache.catalina.connector.Request.getParts(Request.java:2824)
	at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1098)
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:95)
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:88)
	at org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:87)
	at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1178)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1012)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at cn.loveconnect.userservice.biz.common.filter.AccessPathWebFilter.doFilter(AccessPathWebFilter.java:101)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
	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:750)

2 原因分析

Spring Boot工程嵌入的tomcat限制了请求的文件大小,官方文档中这样描述:

Spring Boot embraces the Servlet 3 javax.servlet.http.Part API to support uploading files.
By default Spring Boot configures Spring MVC with a maximum file of 1Mb per file and a maximum of 10Mb of file data in a single request.

翻译一下:每个文件的最大为1Mb,单次请求的文件的总数不能大于10Mb。

3 解决方法

spring boot 2.0 之后,在配置文件application.yamlapplication.properties中增加如下配置:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB

若想不让文件大小受限,将spring.servlet.multipart.max-file-size这个参数设置成-1

Y 延申

Y.1 SpringBoot 之设置文件上传大小限制

问题描述

SpringBoot默认上传文件大小不能超过1MB,超过之后会报以下异常:
org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.

解决方法

  • 方法1

增加Bean配置,注意当前类上需要加注解@Configuration,不然扫不到就不会起作用了;一般配置放在启动类中就可以。

/**  
 * 文件上传配置  
 * @return  
 */
@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();  
    //文件最大
    factory.setMaxFileSize("10240KB"); //KB,MB
    /// 设置总上传数据总大小
    factory.setMaxRequestSize("102400KB"); 
    return factory.createMultipartConfig();  
}
  • 方法2

在配置文件(`application.properties/application.yml)中加入如下设置即可:

# 单个文件大小(Mb和Kb都可以)
spring.servlet.multipart.maxFileSize=30MB
# 总上传的数据大小
spring.servlet.multipart.maxRequestSize=30MB

X 参考文献

标签:fileupload,java,ApplicationFilterChain,catalina,org,apache,http,permitted
From: https://www.cnblogs.com/johnnyzen/p/17398464.html

相关文章

  • 解决docker search influxdb 报错Error response from daemon: Get "https://index.do
    解决dockersearchinfluxdb报错Errorresponsefromdaemon:Get"https://index.docker.io/v1/search?q=influxdb&n=25":dialtcp:lookupindex.docker.ioon192.168.12.2:53:readudp192.168.12.128:39189->192.168.12.2:53:i/otimeoutdockerpull&......
  • 使用go-cqhttp搭建qq机器人
    使用go-cqhttp搭建qq机器人--python处理消息1.环境部署本次使用windows测试部署下载地址:https://github.com/Mrs4s/go-cqhttp/releases下载后解压,会有三个文件,点击运行exe生成bat文件,再运行运行bat,填入0,然后生成配置文件config.yml;填入qq号和密码(不过填入......
  • HTTPS--TLS 总结归纳
    SSL/TLS握手详细过程"clienthello"消息:客户端通过发送"clienthello"消息向服务器发起握手请求,该消息包含了客户端所支持的TLS版本和密码组合以供服务器进行选择,还有一个"clientrandom"随机字符串。"serverhello"消息:服务器发送"serverhello"消息对客户端进行回应,该消......
  • 放弃 okhttp、httpClient,选择了这个牛逼的神仙工具
    https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ%3D%3D&chksm=9beee439ac996d2f3163a57232cafd44e9142959b5452cc3428123017fc4254a7318e0c3b245&idx=1&mid=2247501131&scene=21&sn=bdafb376cfa57cf3109b099f3feed457#wechat_redirect 在SpringBoot项目直......
  • JavaWeb过滤器读取并修改POST请求的参数-YhtHttpServletRequestWrapper
    核心原理就是一个类:javax.servlet.http.HttpServletRequestWrapper一个简单的例子,当任何请求的参数里有aaa的时候,把它的值改成bbb新增一个类自定义的类CustomHttpServletRequestWrapper importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSer......
  • HTTP Error 500.31 - Failed to load ASP.NET Core runtime
    一、问题:Youmustinstallorupdate.NETtorunthisapplication.App:D:\Projects\four_pl\BaseApi3\EDIGateway\bin\Debug\net5.0\EDIGateway.dllArchitecture:x64Framework:'Microsoft.AspNetCore.App',version'5.0.0'(x64).NETlo......
  • mac M2 apple silicon kettle 在线http 接口执行任务
    carte和kettleCarte作为Kettle服务器的一种实现,可以方便地管理和执行转换和作业,并且可以在分布式环境中扩展使用Carte,可以通过RESTWeb服务接口进行调度和监视转换和作业。配置cartedata-integration/pwd/carte-config-master-8080.xml<slave_config><slaveserver......
  • 记录开发第一个Servlet时部署tomcat出现HTTP状态 500 - 内部服务器错误问题 (已解决)
    经历了漫长的deBug过程,我搜索到的文章的报错原因都不相同,希望本片文章能够帮到你,创作不易,点个赞再走吧! 我的报错: 后来发现自己编译后只产生了class文件,没有产生包,于是在dos窗口改变了编译方式: 1javac-d.*.java 这个方法使得 打包编译时自动创建包目录,不需要自己新......
  • go http portal 笔记
    目前使用go的gin框架写了一个httpportal服务器,1、目前为了调试方便,http服务器回报时会设置cookie比如设置cookie:hostid=1;MD5=wewq8wqe等作为traceid方便后续跟踪log2、在设置cookie的时候遇到了,一些问题,比如设置cookie时,希望下次请求带上cookie,则需要设置cookie的Path......
  • 自用nginx配置(常见安全配置,http转https,http和https混合请求,解决http host头攻击漏洞)
    自用nginx配置(常见安全配置,http转https,http和https混合请求,解决httphost头攻击漏洞)#usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{w......