Java 在Spring引导中增加HTTP Post maxPostSize
我有一个相当简单的Spring Boot web应用程序,我有一个带有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
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
多部分设置的约束条件如下:
,表示总计 文件大小不能超过128KBspring.http.multipart.max-file-size设置为128KB
设置为128KB,表示多部分/表单数据的总请求大小 不能超过128KBspring.http.multipart.max请求大小
在
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