Spring MVC与Spring Boot文件上传配置项对比

Spring MVC与Spring Boot文件上传配置项对比


一、Spring MVC配置项(基于不同MultipartResolver实现)

1. 使用 CommonsMultipartResolver(Apache Commons FileUpload)
java 复制代码
@Bean
public MultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize(10485760); // 10MB
    resolver.setMaxInMemorySize(4096);   // 4KB
    resolver.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容器配置参数控制:

xml 复制代码
<!-- 在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.propertiesapplication.yml
properties 复制代码
# 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提供显式开关。

四、关键差异总结
  1. 配置方式

    • Spring MVC :需手动配置MultipartResolver Bean(如CommonsMultipartResolver),或通过Servlet容器参数(如Tomcat的web.xml)。
    • Spring Boot :通过application.properties统一配置,无需手动声明Bean,自动适配容器。
  2. 配置项丰富度

    • Spring Boot :提供更丰富的配置项(如enabledresolve-lazily),且支持单位格式(如10MB)。
    • Spring MVC :依赖具体MultipartResolver实现类,配置项分散(如CommonsMultipartResolver需Java代码配置,StandardServletMultipartResolver需容器参数)。
  3. 兼容性

    • Spring Boot :默认启用StandardServletMultipartResolver,要求Servlet 3.0+容器(如Tomcat 7+)。
    • Spring MVC :若使用CommonsMultipartResolver,需额外引入commons-fileupload依赖。
  4. 推荐实践

    • Spring MVC :优先使用StandardServletMultipartResolver(Servlet 3.0+),简化配置。
    • Spring Boot:直接通过配置文件控制,无需关心底层实现细节。

五、总结

框架 配置复杂度 依赖要求 推荐配置方式
Spring MVC 高(需手动配置) commons-fileupload或Servlet 3.0+ 使用StandardServletMultipartResolver + 容器参数
Spring Boot 低(配置文件) 自动包含依赖 通过spring.servlet.multipart.*配置
相关推荐
{{uname}}4 小时前
利用WebSocket实现实时通知
网络·spring boot·websocket·网络协议
goTsHgo5 小时前
Spring Boot 自动装配原理详解
java·spring boot
唐僧洗头爱飘柔95277 小时前
【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析
java·spring·mybatis·springmvc·动态代理·ioc容器·视图控制器
秋野酱9 小时前
基于javaweb的SpringBoot爱游旅行平台设计和实现(源码+文档+部署讲解)
java·spring boot·后端
有梦想的攻城狮9 小时前
spring中的@Async注解详解
java·后端·spring·异步·async注解
qq_12498707539 小时前
原生小程序+springboot+vue医院医患纠纷管理系统的设计与开发(程序+论文+讲解+安装+售后)
java·数据库·spring boot·后端·小程序·毕业设计
伊成10 小时前
一文详解Spring Boot如何配置日志
java·spring boot·单元测试
bing_15810 小时前
Spring Boot 的自动配置为 Spring MVC 做了哪些事情?
spring boot·spring·mvc
.生产的驴13 小时前
Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
java·运维·数据库·spring·docker·容器·maven
嘵奇13 小时前
Spring Boot中HTTP连接池的配置与优化实践
spring boot·后端·http