我有一个相当简单的Spring Boot Web应用程序,我有一个带有enctype="multipart/form-data"
表单的HTML页面。我收到了这个错误:
多部分请求包含超出相关连接器上设置的maxPostSize限制的参数数据(不包括上载文件)。
我正在使用Spring Boot的默认嵌入式tomcat服务器。显然,默认maxPostSize
值为2兆字节。有没有办法编辑这个值?通过application.properties
这样做是最好的,而不是必须创建自定义bean或乱用xml文件。
答案 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
答案 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.yaml
和application.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)
您可以在GetRDOObjectFromOutlookObject
中设置Tomcat的最大帖子大小,该最大大小由下面的int设置。像其他答案一样,仅设置Parent.Store.Owner
可能还不够。
application.properties
使用Spring Boot spring.servlet.multipart.max-request-size=10MB
答案 7 :(得分:3)
此处的错误不是不是由max-file-size
或max-request-size
(as 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
答案 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