我想为启动提供的 tomcat 设置 maxSwallowSize 属性。 我的 application.properties 有这一行:
server.context-parameters.maxSwallowSize=20971520
由于某种原因不起作用。其他属性(例如 server.port)效果很好。 调试 TomcatEmbeddedServletContainerFactory 中的创建,我看到有一个 ServletContexInitializer (InitParameterConfiguringServletContextInitializer) 具有此属性,但它似乎没有以任何方式使用。 (尽管它是在变量名initializerToUse中,讽刺的是;p)
我不喜欢当上传超过
设置的最大大小时终止连接multipart.max-request-size=10MB
multipart.max-file-size=2MB
这是设置该属性的正确方法吗?在调试过程中,我可以看到 IdentityInputFilter 的默认值为 2MB。
最新版本的 org.springframework.boot:spring-boot-starter-web
server.context-parameters
(如文档中定义的可用于指定 servlet 上下文的 init 参数)。 maxSwallowSize
是连接器的属性。我想这是另一回事。我们没有明确的属性,但您始终可以通过自己的
TomcatEmbeddedServletContainerFactory
进行配置。
@Bean
public TomcatEmbeddedServletContainerFactory containerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
protected void customizeConnector(Connector connector) {
super.customizeConnector(connector);
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
(AbstractHttp11Protocol <?>) connector.getProtocolHandler()).setMaxSwallowSize(value);
}
}
};
}
我发现解决办法是设置
应用程序属性:
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB
并且所有上传都可以正常工作,无需配置 Tomcat。
spring.http.multipart.max-request-size 与 maxSwallowSize 不同。前者配置应用程序,后者配置 Tomcat 服务器。
因此,除了spring.http.multipart 配置之外,您还应该为 maxSwallowSize 提供配置,这可以通过设置应用程序属性来简单地为 Spring Boot 2 完成:
server.tomcat.max-swallow-size=100MB
spring.servlet.multipart.max-request-size=11MB