在Spring Boot中增加HTTP Post maxPostSize

Jor*_*dan 41 java spring tomcat spring-mvc

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

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

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

San*_*wat 42

application.properties文件中写这个:

# Max file size.
spring.http.multipart.max-file-size=1Mb
# Max request size.
spring.http.multipart.max-request-size=10Mb
Run Code Online (Sandbox Code Playgroud)

根据您的需要调整大小.

更新

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

# Max file size.
spring.servlet.multipart.max-file-size=1MB
# Max request size.
spring.servlet.multipart.max-request-size=10MB
Run Code Online (Sandbox Code Playgroud)

附录A.常见的应用程序属性 - Spring

  • 尝试了一下,仍然给我错误。我实际上并没有上传表单中的任何文件,我只是有很多输入字段,其值有数万个字符长,如果我有太多文本(超过 2MB 的文本),它就会崩溃。希望将 postMaxSize 增加到 2MB 以上来避免这个问题。 (2认同)
  • 破折号不应包含在属性名称中.multipart.maxRequestSize = 20MB multipart.maxFileSize = 20MB (2认同)

Jor*_*dan 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
                }
            );
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

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

multipart.maxFileSize=10Mb # Max file size.
multipart.maxRequestSize=10Mb # Max request size.
Run Code Online (Sandbox Code Playgroud)


Ste*_*ton 13

应用 Tomcat 和 servlet 的设置

您可以为 Tomcat 设置最大帖子大小,application.properties其中使用 int 设置,如下所示。仅设置spring.servlet.multipart.max-request-size=10MB,就像在其他一些答案中一样,可能还不够。

# Web properties
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

# Server properties
server.tomcat.max-http-post-size=100000000
server.tomcat.max-swallow-size=100000000
Run Code Online (Sandbox Code Playgroud)

使用 Spring Boot 2.0.5.RELEASE

  • [**注意**] 自 Spring Boot 版本 **2.1.x** 起,Tomcat 相关属性名称已[更改](https://github.com/spring-projects/spring-boot/issues/18521#issuecomment- 541166463)(添加了“form”一词),现在如下:`server.tomcat.max-http-form-post-size`。这可以在 Spring Boot 的官方[通用应用程序属性]列表中看到(https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#server-特性)。 (2认同)

小智 11

如果您在POST请求中使用x-www-form-urlencoded mediatype(就像我一样),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
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢您的提示 - 该属性列于此处https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.server.server.tomcat.max- http-form-post-size 也是如此,现在称为 server.tomcat.max-http-form-post-size (2认同)

161*_*903 6

这里的错误不是max-file-sizeor max-request-size如所指出的)引起的,而是由容器特定的 max-http-post-size 属性引起的。对于tomcat(默认容器),您可以设置:

server.tomcat.max-http-post-size: 10MB
Run Code Online (Sandbox Code Playgroud)

码头:

server.jetty.max-http-post-size: 10MB
Run Code Online (Sandbox Code Playgroud)

逆流:

server.undertow.max-http-post-size: 10MB
Run Code Online (Sandbox Code Playgroud)

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


mkb*_*oel 6

Spring-boot 2.2.x 已更改

server.tomcat.max-http-post-size 
Run Code Online (Sandbox Code Playgroud)

server.tomcat.max-http-form-post-size
Run Code Online (Sandbox Code Playgroud)

spring-boot-问题


Dán*_*Kis 5

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

调整文件上载限制

配置文件上载时,设置文件大小限制通常很有用.想象一下尝试处理5GB文件上传!使用Spring Boot,我们可以使用一些属性设置调整其自动配置的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.


Ond*_*sky 5

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

---
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
Run Code Online (Sandbox Code Playgroud)

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

如果您可以没有tomat生活,则可以将tomcat替换为例如undertow,并完全避免出现此问题。


spi*_*rld 5

这些解决方案都不适合我,而且大多数都完全是题外话,因为OP正在谈论maxPostSize,而不是maxFileSize(如果超过大小,后者会给你一个不同的错误)

解决方案:在/tomcat/conf/server.xml中为Connector添加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" />
Run Code Online (Sandbox Code Playgroud)


Lok*_*oki 5

我面临着类似的问题。我收到的错误是 -

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

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

server:
  tomcat:
    max-http-form-post-size: 100000000
    max-swallow-size: 100000000
Run Code Online (Sandbox Code Playgroud)

随着 -

spring:
  servlet:
    multipart:
      maxFileSize: 10MB
      maxRequestSize: 10MB
Run Code Online (Sandbox Code Playgroud)

以上配置工作正常。