Spring MVC与Spring Boot文件上传配置项对比
一、Spring MVC配置项(基于不同MultipartResolver实现)
1. 使用 CommonsMultipartResolver(Apache Commons FileUpload)
 
@Bean
public MultipartResolver multipartResolver() {CommonsMultipartResolver resolver = new CommonsMultipartResolver();resolver.setMaxUploadSize(10485760); // 10MBresolver.setMaxInMemorySize(4096);   // 4KBresolver.setDefaultEncoding("UTF-8");resolver.setUploadTempDir(new FileSystemResource("/temp/upload"));return resolver;
}
 
| 配置项 | 描述 | 默认值 | 作用域 | 
|---|---|---|---|
maxUploadSize | 允许上传的文件总大小(字节) | -1(无限制) | 全局限制 | 
maxInMemorySize | 内存中临时存储的最大大小(超过则写入磁盘) | 10240(10KB) | 内存与磁盘切换阈值 | 
defaultEncoding | 请求编码格式 | ISO-8859-1 | 解析文件名和参数编码 | 
uploadTempDir | 临时文件存储路径 | 系统默认临时目录 | 自定义临时目录路径 | 
resolveLazily | 延迟解析请求(避免大文件阻塞) | false | 控制请求解析时机 | 
2. 使用 StandardServletMultipartResolver(Servlet 3.0+)
 
无需手动配置MultipartResolver属性,但需通过Servlet容器配置参数控制:
<!-- 在web.xml中配置Tomcat参数 -->
<Context><Parameter name="maxFileSize" value="10MB" override="false"/><Parameter name="maxRequestSize" value="10MB" override="false"/>
</Context>
 
| 配置项 | 描述 | 默认值 | 作用域 | 
|---|---|---|---|
maxFileSize | 单个文件最大大小(Servlet容器参数) | 无限制 | 单个文件限制 | 
maxRequestSize | 请求总大小限制(Servlet容器参数) | 无限制 | 全局请求限制 | 
fileSizeThreshold | 内存与磁盘切换阈值(Servlet容器参数) | 0 | 内存与磁盘切换阈值 | 
二、Spring Boot配置项(通过application.properties或application.yml)
 
# application.properties配置示例
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.location=/temp/upload
spring.servlet.multipart.enabled=true
spring.servlet.multipart.default-charset=UTF-8
spring.servlet.multipart.resolve-lazily=true
 
| 配置项 | 描述 | 默认值 | 作用域 | 
|---|---|---|---|
spring.servlet.multipart.max-file-size | 单个文件最大大小(格式:10MB) | 1MB | 单个文件限制 | 
spring.servlet.multipart.max-request-size | 请求总大小限制(格式:10MB) | 10MB | 全局请求限制 | 
spring.servlet.multipart.location | 临时文件存储路径 | 系统默认临时目录 | 自定义临时目录路径 | 
spring.servlet.multipart.enabled | 是否启用multipart支持 | true | 全局开关 | 
spring.servlet.multipart.default-charset | 请求编码格式 | UTF-8 | 解析文件名和参数编码 | 
spring.servlet.multipart.resolve-lazily | 延迟解析请求(避免大文件阻塞) | false | 控制请求解析时机 | 
三、配置项对比表格
| 配置项 | Spring MVC(CommonsMultipartResolver) | Spring MVC(StandardServletMultipartResolver) | Spring Boot | 说明 | 
|---|---|---|---|---|
| 单文件大小限制 | maxUploadSize(字节) | maxFileSize(Servlet容器参数) | max-file-size | Spring Boot支持单位格式(如10MB),而Spring MVC需转换单位。 | 
| 总请求大小限制 | maxUploadSize(字节) | maxRequestSize(Servlet容器参数) | max-request-size | Spring Boot配置更直观,支持单位格式。 | 
| 临时文件路径 | uploadTempDir | 无(依赖容器默认路径) | location | Spring Boot提供显式配置。 | 
| 编码格式 | defaultEncoding | 无 | default-charset | Spring Boot默认UTF-8,与国际标准一致。 | 
| 内存与磁盘切换阈值 | maxInMemorySize(字节) | fileSizeThreshold(Servlet容器参数) | 无 | Spring Boot未直接暴露此配置项,需通过容器参数控制。 | 
| 延迟解析 | resolveLazily | 无 | resolve-lazily | Spring Boot支持此配置,避免大文件阻塞线程。 | 
| 全局开关 | 无(需手动配置Bean) | 无(需手动配置Bean) | enabled | Spring Boot提供显式开关。 | 
四、关键差异总结
-  
配置方式:
- Spring MVC:需手动配置
MultipartResolverBean(如CommonsMultipartResolver),或通过Servlet容器参数(如Tomcat的web.xml)。 - Spring Boot:通过
application.properties统一配置,无需手动声明Bean,自动适配容器。 
 - Spring MVC:需手动配置
 -  
配置项丰富度:
- Spring Boot:提供更丰富的配置项(如
enabled、resolve-lazily),且支持单位格式(如10MB)。 - Spring MVC:依赖具体
MultipartResolver实现类,配置项分散(如CommonsMultipartResolver需Java代码配置,StandardServletMultipartResolver需容器参数)。 
 - Spring Boot:提供更丰富的配置项(如
 -  
兼容性:
- Spring Boot:默认启用
StandardServletMultipartResolver,要求Servlet 3.0+容器(如Tomcat 7+)。 - Spring MVC:若使用
CommonsMultipartResolver,需额外引入commons-fileupload依赖。 
 - Spring Boot:默认启用
 -  
推荐实践:
- Spring MVC:优先使用
StandardServletMultipartResolver(Servlet 3.0+),简化配置。 - Spring Boot:直接通过配置文件控制,无需关心底层实现细节。
 
 - Spring MVC:优先使用
 
五、总结
| 框架 | 配置复杂度 | 依赖要求 | 推荐配置方式 | 
|---|---|---|---|
| Spring MVC | 高(需手动配置) | 需commons-fileupload或Servlet 3.0+ | 使用StandardServletMultipartResolver + 容器参数 | 
| Spring Boot | 低(配置文件) | 自动包含依赖 | 通过spring.servlet.multipart.*配置 |