在Spring Boot中增加HTTP Post maxPostSize

时间:2015-10-20 09:26:08

标签: java spring spring-mvc tomcat

我有一个相当简单的Spring Boot Web应用程序,我有一个带有enctype="multipart/form-data"表单的HTML页面。我收到了这个错误:

  

多部分请求包含超出相关连接器上设置的maxPostSize限制的参数数据(不包括上载文件)。

我正在使用Spring Boot的默认嵌入式tomcat服务器。显然,默认maxPostSize值为2兆字节。有没有办法编辑这个值?通过application.properties这样做是最好的,而不是必须创建自定义bean或乱用xml文件。

15 个答案:

答案 0 :(得分:35)

application.properties 文件中写下:

# Max file size.
spring.http.multipart.max-file-size=1Mb
# Max request size.
spring.http.multipart.max-request-size=10Mb

根据您的需要调整大小。

<强>更新

注意: Spring Boot 2 开始,您现在可以做到

# Max file size.
spring.servlet.multipart.max-file-size=1MB
# Max request size.
spring.servlet.multipart.max-request-size=10MB

Appendix A. Common application properties - Spring

答案 1 :(得分:16)

找到解决方案。将此代码添加到运行SpringApplication.run的同一个类中。

// Set maxPostSize of embedded tomcat server to 10 megabytes (default is 2 MB, not large enough to support file uploads > 1.5 MB)
@Bean
EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
    return (ConfigurableEmbeddedServletContainer container) -> {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
            tomcat.addConnectorCustomizers(
                (connector) -> {
                    connector.setMaxPostSize(10000000); // 10 MB
                }
            );
        }
    };
}

编辑:显然将此添加到您的application.properties文件也会增加maxPostSize,但我自己没有尝试过,所以我无法确认。

multipart.maxFileSize=10Mb # Max file size.
multipart.maxRequestSize=10Mb # Max request size.

答案 2 :(得分:10)

如果您在POST请求中使用 x-www-form-urlencoded 媒体类型(就像我一样),spring-boot的multipart属性不起作用。如果您的spring-boot应用程序也正在启动tomcat,则需要在application.properties文件中设置以下属性:

# Setting max size of post requests to 6MB (default: 2MB)
server.tomcat.max-http-post-size=6291456

在spring-boot文档中的任何地方都找不到该信息。希望它对任何坚持使用 x-www-form-urlencoded 身体编码的人有帮助。

答案 3 :(得分:5)

来自文档:https://spring.io/guides/gs/uploading-files/

  

调整文件上传限制

     

配置文件上传时,设置限制通常很有用   文件大小。想象一下尝试处理5GB文件上传!随着春天   启动时,我们可以调整其自动配置的MultipartConfigElement   物业设置。

     

将以下属性添加到现有属性中   src/main/resources/application.properties

     

spring.http.multipart.max-file-size=128KB

     

spring.http.multipart.max-request-size=128KB

     

多部分设置的约束如下:

     
      
  • spring.http.multipart.max-file-size is set to 128KB,意为总数   文件大小不能超过128KB。

  •   
  • spring.http.multipart.max-request-size   设置为128KB,表示multipart / form-data的总请求大小   不能超过128KB。

  •   

答案 4 :(得分:4)

我们在application.yamlapplication.properties中定义属性时会有所不同。

application.yml

spring:
  http:
    multipart:
      max-file-size: 256KB
      max-request-size: 256KB

application.propeties

spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

注意:Spring版本4.3和Spring启动1.4

答案 5 :(得分:3)

首先,请确保您使用的是spring.servlet而不是spring.http

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

如果你必须使用tomcat,你最终可能会创建EmbeddedServletContainerCustomizer,这不是一件好事。

如果你可以在没有tomat的情况下生活,你可以replace tomcat with e.g. undertow并完全避免这个问题。

答案 6 :(得分:3)

为Tomcat和Servlet应用设置

您可以在GetRDOObjectFromOutlookObject中设置Tomcat的最大帖子大小,该最大大小由下面的int设置。像其他答案一样,仅设置Parent.Store.Owner可能还不够。

application.properties

使用Spring Boot spring.servlet.multipart.max-request-size=10MB

答案 7 :(得分:3)

此处的错误不是不是由max-file-sizemax-request-sizeas pointed out)引起的,而是由特定于容器的max-http-post-size属性引起的。对于tomcat(默认容器),您可以设置:

server.tomcat.max-http-post-size: 10MB

码头:

server.jetty.max-http-post-size: 10MB

下拖:

server.undertow.max-http-post-size: 10MB

这与OP的答案here具有相同的效果,但是通过application.properties更为可取。

答案 8 :(得分:1)

在Spring Boot> 2版本中,只需将以下内容添加到“ application.properties”文件中即可:

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

答案 9 :(得分:1)

我确实遇到了类似的问题。我在哪里-

 "IllegalStateException multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector"

解决方案 我应用了以下属性,其中使用 max-http-form-post-size 属性确实对我有所帮助-

server:
  tomcat:
    max-http-form-post-size: 100000000
    max-swallow-size: 100000000

--

spring:
  servlet:
    multipart:
      maxFileSize: 10MB
      maxRequestSize: 10MB

对我有用。

答案 10 :(得分:1)

Spring-boot 2.2.x 已更改

server.tomcat.max-http-post-size 

server.tomcat.max-http-form-post-size

spring-boot-issue

答案 11 :(得分:0)

没有一个解决方案对我有用,并且大多数解决方案都是完全不正确的,因为OP所谈论的是 maxPostSize ,而不是 maxFileSize (后者给您带来了不同的错误无论如何,如果超出尺寸的话

解决方案:在/tomcat/conf/server.xml中,将maxPostSize =“”属性添加到连接器

<!-- A "Connector" represents an endpoint by which requests are received
     and responses are returned. Documentation at :
     Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     Java AJP  Connector: /docs/config/ajp.html
     APR (HTTP/AJP) Connector: /docs/apr.html
     Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxPostSize="10485760"
           redirectPort="8443" />

答案 12 :(得分:0)

对我来说,以前的工作都没有(也许在yaml中使用应用程序是一个问题),但是可以使用以下方法解决该问题:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.util.unit.DataSize;

import javax.servlet.MultipartConfigElement;

@ServletComponentScan
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize(DataSize.ofBytes(512000000L));
        factory.setMaxRequestSize(DataSize.ofBytes(512000000L));
        return factory.createMultipartConfig();
    }
}

答案 13 :(得分:0)

这对我适用于Tomcat 8

MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName objectName = new ObjectName("Catalina:type=Connector,port=" + 8080);
mbeanServer.setAttribute(objectName, new Attribute("maxPostSize", 100000000));

答案 14 :(得分:0)

对我来说,它在Yaml中起作用

spring:
    profiles: ....
    application:
        name:"...."
    http:
        multipart:
            max-file-size: 2147483648
            max-request-size: 2147483648