无法修改配置时如何处理超出大小限制的Multipart文件上传问题
可行解决方案
方案1:注册Multipart配置Bean
通过Spring配置类注入MultipartConfigElement类型Bean,该配置优先级高于application.yml中的配置,无需修改配置文件即可生效,代码示例如下:
import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.unit.DataSize; import javax.servlet.MultipartConfigElement; @Configuration public class MultipartUploadConfig { @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory configFactory = new MultipartConfigFactory(); // 单个上传文件最大大小,-1表示无限制 configFactory.setMaxFileSize(DataSize.ofBytes(-1)); // 单次上传请求总大小,-1表示无限制 configFactory.setMaxRequestSize(DataSize.ofBytes(-1)); return configFactory.createMultipartConfig(); } }
方案2:自定义内嵌Tomcat容器配置(仅适用于使用Tomcat作为内置容器的场景)
如果方案1未生效,可以通过定制Tomcat连接器的请求大小限制兜底:
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatServerConfig { @Bean public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatRequestSizeCustomizer() { return factory -> factory.addConnectorCustomizers(connector -> { // 设置Tomcat允许的最大POST请求大小,-1表示无限制 connector.setMaxPostSize(-1); }); } }
配置生效说明
- 优先选择方案1,兼容所有Servlet规范的容器,无需依赖具体服务器实现
- 如需设置固定大小限制,可将
-1替换为对应大小,例如DataSize.ofMegabytes(100)即代表最大限制为100MB - 确保配置类在Spring的组件扫描路径下,可放在启动类同级目录或子目录下
内容的提问来源于stack exchange,提问作者Juan Sanjaya
相关产品推荐
相关产品推荐

