SpringBoot项目上传超过10M的文件失败,通过在application.properties或者yml中修改文件大限制制作的配置无效的解决方法

主要的报错信息:

org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (16551260) exceeds the configured maximum (10485760)

全部报错信息:

org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (16551260) exceeds the configured maximum (10485760)
	at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:805) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.connector.Request.parseParts(Request.java:2846) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.connector.Request.parseParameters(Request.java:3185) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.connector.Request.getParameter(Request.java:1116) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:381) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:84) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_311]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_311]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_311]

我根据网上的修改办法在application.properties或者application.yml文件中 都分别进行了配置和测试,但是运行起来都还是上传失败的。。。

后来我猜测应该是覆盖了,所以我的配置没有生效。

解决办法: 创建一个配置,覆盖现有的 bean 定义。

    @Bean
    public MultipartConfigElement multipartConfigElement() {
    
    
        MultipartConfigFactory config = new MultipartConfigFactory();
        // 设置上传文件的单个大小限制
        config.setMaxRequestSize(DataSize.of(100, DataUnit.MEGABYTES));
        // 设置总的上传的大小限制
        config.setMaxRequestSize(DataSize.of(200, DataUnit.MEGABYTES));
        // 设置临时保存目录
        //config.setLocation("/");
        // 创建一个上传配置并返回
        return config.createMultipartConfig();  
	}

上边的文件大小可以更改为适合自己的。

运行之后如果报这个错误
在这里插入图片描述
那么根据他的提示:在 application.properties 中增加 spring.main.allow-bean-definition-overriding=true 这样的一个配置,就ok了
这个配置的意思是:
在 Spring Boot 中,设置 spring.main.allow-bean-definition-overriding=true 属性可以允许覆盖已存在的 bean 定义。默认情况下,如果在应用程序上下文中存在一个 bean 定义,而且另一个 bean 定义尝试注册相同名称的 bean,那么 Spring Boot 将抛出一个异常并拒绝注册新的 bean。

但是,有时候可能需要覆盖现有的 bean 定义,例如在测试中使用 Mock 对象替换实际的 bean 或者使用自定义的 bean 实现替换 Spring Boot 默认的实现等。在这种情况下,可以设置 spring.main.allow-bean-definition-overriding=true 属性来允许覆盖现有的 bean 定义。

需要注意的是,过度使用这个属性可能会导致意想不到的行为或难以诊断的问题。因此,建议仅在必要时使用此属性,并尽量避免覆盖已存在的 bean 定义。

猜你喜欢

转载自blog.csdn.net/qq_45881167/article/details/130171020
今日推荐