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();  
	}

上記のファイルサイズは必要に応じて変更できます。

このエラーが実行後に報告された場合は
ここに画像の説明を挿入
、プロンプトに従って: spring.main.allow-bean-definition-overriding=trueapplication.properties にそのような構成を追加すると、問題ありません
。この構成は
、Spring Boot で、 spring.main.allow-bean-definition-overriding= を設定することを意味します。 true 属性を使用すると、既存の Bean 定義をオーバーライドできます。デフォルトでは、Bean 定義がアプリケーション コンテキストに存在し、別の Bean 定義が同じ名前で Bean を登録しようとすると、Spring Boot は例外をスローし、新しい Bean の登録を拒否します。

ただし、Mock オブジェクトを使用してテスト内の実際の Bean を置き換えたり、カスタム Bean 実装を使用して Spring Boot のデフォルト実装を置き換えたりするなど、既存の Bean 定義をオーバーライドする必要がある場合があります。この場合、既存の Bean 定義のオーバーライドを許可するようにプロパティ spring.main.allow-bean-setting-overriding=true を設定できます。

このプロパティを過度に使用すると、予期しない動作や診断が難しい問題が発生する可能性があることに注意してください。したがって、このプロパティは必要な場合にのみ使用し、既存の Bean 定義を上書きしないようにすることをお勧めします。

おすすめ

転載: blog.csdn.net/qq_45881167/article/details/130171020