【问题标题】:"the request was rejected because its size " Spring, tomcat“请求被拒绝,因为它的大小” Spring,tomcat
【发布时间】:2018-08-24 13:52:00
【问题描述】:

我正在尝试使用 springboot 制作一个简单的上传应用程序,它可以正常工作,直到我尝试上传 10Mb+ 文件,我在屏幕上收到此消息:

There was an unexpected error (type=Internal Server Error, status=500).
Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (14326061) exceeds the configured maximum (10485760)

我进行了一些研究,但到目前为止没有任何效果。我将把到目前为止我尝试过的事情留在这里。

将此代码(以各种方式)放在我的“application.yml”中

multipart: 
 maxFileSize: 51200KB
 maxRequestFile: 51200KB  

我也在我的主要课程中尝试过这个:

    @Bean
public TomcatEmbeddedServletContainerFactory containerFactory() {
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
     factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
        @Override
        public void customize(Connector connector) {
         ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
        }
     });
     return factory;
}

还有一些奇怪的事情。如果我输入我的 tomcat web.xml,multipart-config 是:

<multipart-config>
      <!-- 50MB max -->
      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>

那么这个“...配置的最大值(10485760)”到底是从哪里来的呢? (旁注:我使用的是 netbeans 8.1 和 springboot 1.5)。

谢谢伙计们。(对于英语 s2 感到抱歉)

既然问了,这是我的application.yml

 server:
      port: 9999
      context-path: /client
    logging:
      level:
        org.springframework.security: DEBUG
    endpoints:
      trace:
        sensitive: false

    spring:
        thymeleaf:
            cache: false
        multipart: 
          maxFileSize: 51200KB
          maxRequestFile: 51200KB  

    #################################################################################

    security:
      basic:
        enabled: false
      oauth2:
        client:
          client-id: acme2
          client-secret: acmesecret2
          access-token-uri: http://localhost:8080/oauth/token
          user-authorization-uri: http://localhost:8080/oauth/authorize
        resource:
          user-info-uri: http://localhost:8080/me
    #    

【问题讨论】:

  • 尝试使用spring.servlet.multipart.max-file-size=51200KBspring.servlet.multipart.max-request-size=51200KB
  • 感谢您的回复。我试过“spring.servlet”但没有成功。而且我认为它没有重复,因为该问题中的解决方案没有解决我的问题。
  • 能否提供application.yml文件
  • @Rahul Mahadik 我刚刚添加了我的 application.yml。即使在“spring.http”中,这也不起作用......

标签: java spring-boot upload


【解决方案1】:

在 SpringBoot 2.6.3 中设置“spring.http.multipart.max-file-size”不起作用。以下对我有用:

spring:
  servlet:
    multipart:
      max-file-size: 50MB
      max-request-size: 50MB

【讨论】:

    【解决方案2】:
    spring:
      http:
        multipart:
          enabled: true
          max-file-size: 50MB
          max-request-size: 50MB
    

    spring.http.multipart.max-file-size=50MB
    spring.http.multipart.max-request-size=50MB
    

    参考here

    希望能成功

    【讨论】:

    • 谢谢,它起作用了(:但是你怎么知道的,因为它不在文档中,也没有在这个问题的其他解决方案中。为什么我必须启用它而其他人没有也有吗?
    • @Estudeiro 欢迎老兄。 :)
    • @Estudeiro 我正在研究 Grails,它也有相同的配置文件。我看到你的例外org.apache.tomcat.util.http.fileupload.FileUploadBase 所以
    • 由于这是公认的答案,我将在这里评论 Spring 2.6.1 的最新语法:(注意 http -> servlet):``` spring.servlet。 multipart.max-file-size=50MB spring.servlet.multipart.max-request-size=50MB ``` 回答中提到,最新版本最好参考docs
    【解决方案3】:
    spring:
      servlet: 
        multipart: 
           enabled: true 
           file-size-threshold: 200KB   
           max-file-size:       500MB 
           max-request-size:    500MB
    
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。
    【解决方案4】:

    以下是基于版本的方式,

    第一个:

    spring.servlet.multipart.max-file-size=1000MB
    spring.servlet.multipart.max-request-size=1000MB
    

    第二个:

    spring.http.multipart.max-file-size=50MB
    spring.http.multipart.max-request-size=50MB
    

    第三个:

    multipart.enabled=true
    multipart.max-file-size=100MB
    multipart.max-request-size=100MB
    

    【讨论】:

      【解决方案5】:

      用于配置 CommonsMultipartResolver 定义一个 bean 名称为 MultipartFilter.DEFAULT_MULTIPART_RESOLVER_BEAN_NAME 由于默认 Spring Boot 的默认 MultipartFilter 会查找具有默认 bean 名称的解析器。

      @Bean(name = MultipartFilter.DEFAULT_MULTIPART_RESOLVER_BEAN_NAME)
      protected MultipartResolver getMultipartResolver() {
          CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
          multipartResolver.setMaxUploadSize(20971520);
          multipartResolver.setMaxInMemorySize(20971520);
          return multipartResolver;
      }
      

      【讨论】:

        【解决方案6】:

        对于 SpringBoot 1.5.7 到 2.1.2 需要在 application.properties 文件中设置的属性是:

        spring.http.multipart.max-file-size=100MB
        spring.http.multipart.max-request-size=100MB
        

        还要确保“resources”文件夹中有 application.properties 文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-28
          • 2014-06-19
          • 2018-07-05
          • 2021-05-15
          • 1970-01-01
          • 2020-01-07
          • 2016-06-30
          • 2013-07-02
          相关资源
          最近更新 更多