Spring 6中如何创建MultipartResolver Bean并设置maxUploadSize?
Spring 6 中设置文件上传大小的方法
在Spring 6里,CommonsMultipartResolver被移除后,StandardServletMultipartResolver成为默认的文件上传处理器。这个Resolver依赖Servlet 3.0+的标准API,所以文件上传的大小限制不能通过Resolver的Bean属性设置,要在Servlet容器层面配置,具体分两种场景:
1. Spring Boot 项目
直接在配置文件里添加参数即可,支持.properties和.yml两种格式:
application.properties
# 单文件最大上传大小(对应你原来的1073741824字节,即1GB) spring.servlet.multipart.max-file-size=1GB # 整个请求的最大大小(包含所有文件和表单数据) spring.servlet.multipart.max-request-size=1GB # 可选:文件大小超过阈值时,会写入临时文件 spring.servlet.multipart.file-size-threshold=0
application.yml
spring: servlet: multipart: max-file-size: 1GB max-request-size: 1GB file-size-threshold: 0
2. 传统Spring MVC项目
如果是基于web.xml或者Java代码配置Servlet容器,需要直接配置Servlet的multipart-config:
基于web.xml配置
在DispatcherServlet的配置里添加<multipart-config>标签:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <!-- 配置文件上传限制 --> <multipart-config> <!-- 单文件最大大小,单位字节 --> <max-file-size>1073741824</max-file-size> <!-- 整个请求最大大小,单位字节 --> <max-request-size>1073741824</max-request-size> <!-- 可选:写入临时文件的阈值 --> <file-size-threshold>0</file-size-threshold> </multipart-config> </servlet>
基于Java代码配置
通过MultipartConfigElement配置参数,再注册到DispatcherServlet:
@Configuration public class WebConfig implements WebMvcConfigurer { @Bean public ServletRegistrationBean<DispatcherServlet> dispatcherServletRegistration() { ServletRegistrationBean<DispatcherServlet> registration = new ServletRegistrationBean<>(new DispatcherServlet(), "/"); // 配置文件上传参数 MultipartConfigElement multipartConfig = new MultipartConfigElement( null, // 临时文件存储路径,默认用容器临时目录 1073741824L, // 单文件最大大小 1073741824L, // 整个请求最大大小 0 // 文件阈值 ); registration.setMultipartConfig(multipartConfig); return registration; } }
另外需要注意:Spring Boot会自动注册StandardServletMultipartResolver的Bean,传统项目需要手动声明:
@Bean public MultipartResolver multipartResolver() { return new StandardServletMultipartResolver(); }
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

