Java 在Spring引导中增加HTTP Post maxPostSize

Java 在Spring引导中增加HTTP Post maxPostSize,java,spring,spring-mvc,tomcat,Java,Spring,Spring Mvc,Tomcat,我有一个相当简单的Spring Boot web应用程序,我有一个带有enctype=“multipart/form data”表单的HTML页面。我得到了这个错误: 多部分请求包含的参数数据(不包括上载的文件)超过了关联连接器上设置的maxPostSize限制 我使用的是SpringBoot的默认嵌入式tomcat服务器。显然,默认的maxPostSize值是2兆字节。有没有办法编辑此值?通过application.properties这样做最好,而不必创建自定义bean或处理xml文件。在a

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

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


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

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

找到了解决方案。将此代码添加到运行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.
从文件:

调整文件上载限制

在配置文件上载时,对 文件的大小。想象一下,尝试处理5GB文件上传!带弹簧 启动时,我们可以使用一些 属性设置

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

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

spring.http.multipart.max文件大小=128KB


spring.http.multipart.max请求大小=128KB

多部分设置的约束条件如下:


  • spring.http.multipart.max-file-size设置为128KB
    ,表示总计 文件大小不能超过128KB


  • spring.http.multipart.max请求大小
    设置为128KB,表示多部分/表单数据的总请求大小 不能超过128KB


application.yaml
application.properties
中定义属性时存在一些差异

application.yml
中:

spring:
  http:
    multipart:
      max-file-size: 256KB
      max-request-size: 256KB
应用程序.properties
中:

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

注意:Spring版本4.3和Spring boot 1.4首先,确保您使用的是
Spring.servlet
,而不是
Spring.http

---
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
如果必须使用tomcat,那么最终可能会创建,这并不是一件很好的事情

如果你能生活在没有tomat的情况下,你就可以避免这个问题

如果在POST请求中使用x-www-form-urlencoded mediatype(如我所做的),spring boot的multipart属性将不起作用。如果spring引导应用程序也在启动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-Url编码身体的人。

这些解决方案对我都不起作用,而且大多数都是完全脱离主题的,因为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" />

应用Tomcat和servlet的设置 您可以在
application.properties
中设置Tomcat的最大post大小,该设置使用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

使用Spring Boot
2.0.5。发布

对于我来说,以前的工作没有任何内容(这里可能会出现将应用程序与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();
    }
}

这对我来说对Tomcat 8很有效

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

对我来说,这在亚马尔奏效了

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

此处的错误不是由
max file size
max request size
()引起的,而是由容器特定的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的答案具有相同的效果,但是通过更可取的application.properties。

在Spring Boot>2版本中,您可以简单地将以下内容添加到“application.properties”文件中:


我确实面临类似的问题。我到哪里去了-

 "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

它对我起了作用。

无论您在哪里声明了多部分解析器,您都可以更改这些内容。我在任何地方都没有声明过它。我假设这意味着SpringBoot会自动创建和处理它。这是否意味着我不能编辑它?你可以编辑它。找到多部分解析器并编辑该值。如果有多部分支持,我相信您会找到一些配置。你甚至还没有在主帖子中发布你的配置,所以没有人能指出要更改什么。尝试了之后,仍然给我错误。实际上,我并没有上传表单中的任何文件,我只是有很多输入字段,其值长达数万个字符,如果我有太多的文本(超过2MB的文本),它就会崩溃。希望将postMaxSize增加到2MB以上以避免此问题。属性名称中不应包含破折号。multipart.maxRequestSize=20MB multipart.maxFileSize=20MB
spring.http.multipart.max file size=1Mb#max file size。值可以使用后缀“MB”或“KB”表示MB或KB大小。spring.http.multipart.max request size=10Mb#max request size。值可以使用后缀“MB”或“KB”表示兆字节或千字节大小。
现已弃用:(编辑:Nevermind,fo