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)
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 设置最大帖子大小,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
小智 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编码身体的人.
这里的错误不是由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 更可取。
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)
来自文档: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.
首先,请确保您使用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,并完全避免出现此问题。
这些解决方案都不适合我,而且大多数都完全是题外话,因为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)
我面临着类似的问题。我收到的错误是 -
"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)
以上配置工作正常。
| 归档时间: |
|
| 查看次数: |
60584 次 |
| 最近记录: |