SpringBoot上传文件抛 Maximum upload size of 10000000 bytes exceeded 错误

本文将介绍怎样解决 org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 10000000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (31592358) exceeds the configured maximum (10000000) 错误。

今天使用 SpringBoot 通过 form 表单的形式上传文件,结果上传小文件是正确的;但是上传大文件(大于10M)则抛出如下错误信息:

[ERROR]-[20-07-08 10:46:51 031]-[http-bio-8090-exec-15]-[c.g.c.e.CustomSimpleMappingExceptionResolver]:
org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 10000000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (31592358) exceeds the configured maximum (10000000)
	at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:163)
	at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:143)
	at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1104)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:936)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	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:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	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:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:130)
	at org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
	at org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:105)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:123)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:341)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

根据上面的错误信息可以得知,SpringBoot 默认上传文件最大大小为10000000KB,但是我们上传的文件实际为 31592358KB。因此抛出了异常,下面将介绍几种解决方式。

解决办法

(1)修改Tomcat server.xml 配置文件,添加 maxPostSize 进行限制。如下:

<Connector port="8080" protocol="HTTP/1.1" 
		   connectionTimeout="20000" 
		   maxPostSize="-1"
		   redirectPort="8443" URIEncoding="UTF-8" />

注意:maxPostSize 在 6.* 版本中,设置为 0 表示不限制文件大小;在 7.* 版本后,设置为 -1 表示不限制文件大小。官方给出的信息如下:

Tomcat 6 的说明信息如下图:

SpringBoot上传文件抛 Maximum upload size of 10000000 bytes exceeded 错误

原文地址:https://tomcat.apache.org/tomcat-6.0-doc/config/http.html

Tomcat 7 的说明信息如下图:

SpringBoot上传文件抛 Maximum upload size of 10000000 bytes exceeded 错误

原文地址:https://tomcat.apache.org/tomcat-7.0-doc/changelog.html

(2)如果你使用了 nginx 代理服务器,则需要查看 nginx 是否有限制请求数据大小

server {
        listen       80;
        #server_name  localhost;
        client_max_body_size 500M;
 
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
	location / {
	    proxy_pass   https://127.0.0.1:8080/;
        }
}

其中,client_max_body_size 500M 表示限制上传文件大小最大为 500M。

(3)配置 Spring Boot 上传文件的限制。不同版本的 Spring Boot 配置稍有区别,配置如下:

SpringBoot 1.* 版本配置如下:

# 属性配置文件
# 单个文件最大大小
spring.http.multipart.maxFileSize=20Mb
# 所有上传文件最大大小
spring.http.multipart.maxRequestSize=100Mb

# yml  配置文件
spring:
    http:
        multipart:
            # 单个文件最大大小
            maxFileSize: 20Mb
            # 所有上传文件最大大小
            maxRequestSize: 100Mb

SpringBoot 2.* 版本配置如下:

# 属性配置文件
# 单个文件最大大小
spring.servlet.multipart.max-file-size=20MB
# 所有上传文件最大大小
spring.servlet.multipart.max-request-size=100MB

# yml 配置文件
spring:
    servlet:
        multipart:
            # 单个文件最大大小
            max-file-size: 20MB
            # 所有上传文件最大大小
            max-request-size: 100MB

(4)如果上面配置都没有起作用,检查一下你的 Spring MVC 配置是否限制了文件上传大小。配置如下:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8">
       <property name="maxUploadSize" value="524288000" />
        <property name="maxInMemorySize" value="4096" />
</bean>

上面这些都是在解决这个问题时在网上找到的解决办法,为了以后方便查阅,因此记录和分享。

业精于勤,荒于嬉。——韩愈《进学解》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号