SpringBoot18-文件上传助手MultipartResolver
一、MultipartResolver 是什么?
你可以把 MultipartResolver 理解为:
Spring 用来解析“上传文件”的小助手。
当浏览器上传文件时,发送的数据格式是 multipart/form-data。
Spring 默认无法直接理解这种格式。所以需要一个专门的组件来 解析上传的数据,把:
文件 → 变成 MultipartFile 对象
文本字段 → 变成普通参数
这个负责解析的人,就是 MultipartResolver。
1-1、场景
你写了一个文件上传接口:
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {System.out.println(file.getOriginalFilename());return "ok";
}
你能够拿到 MultipartFile file,靠的就是 MultipartResolver。
如果没有它,你写的是:
String file
而不是文件对象,文件就变成乱码或无法识别。
1-2、它是怎么工作的?
当请求来了,Spring MVC 会看:
请求的 Content-Type 是不是 multipart/form-data?
- 如果是 → 交给
MultipartResolver处理 - 否则 → 当普通请求处理
也就是说:
MultipartResolver 只负责文件上传的请求
二、MultipartResolver 的常见实现(面试常考)
| 实现类 | 属于谁 | 现在常用吗? | 说明 |
|---|---|---|---|
CommonsMultipartResolver | Apache Commons FileUpload 技术 | ❌ 已过时(老项目用) | 以前的标准实现 |
StandardServletMultipartResolver | Servlet 3.0+ 内置支持 | ✅ 新项目推荐 | Spring Boot 默认就用它 |
所以,在 Spring Boot 中,你基本不需要配置它,它自动启用。
三、在 Spring Boot 中怎样设置文件上传的大小限制?
只需要在 application.yml 配一下文件大小限制:
spring:servlet:multipart:max-file-size: 10MBmax-request-size: 20MB
然后直接写上传接口就能用了。
| 配置项 | 说明 |
|---|---|
max-file-size | 单个上传文件的最大大小限制 |
max-request-size | 一次请求所有文件/数据的总体上限 |
不配 → 默认限制是 1MB(Spring Boot 默认值)
配了 → 可以上传更大的文件
Spring Boot 已经自动帮你注册了:
StandardServletMultipartResolver
那什么时候需要手动配置呢?
只在 老项目(Spring MVC XML 配置时代) 才需要。
<!-- 老项目中使用 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760"/>
</bean>
一句话记忆
浏览器上传文件 → 数据是 multipart/form-data → Spring 看不懂
MultipartResolver → 专门把它变成 MultipartFile → 你就能 @RequestParam 拿到文件了
总结
| 概念 | 含义 |
|---|---|
| MultipartResolver | Spring 中专门解析上传文件的人 |
| MultipartFile | 解析后的文件对象(你在 Controller 里用的) |
| Spring Boot 默认使用 | StandardServletMultipartResolver |
| 老项目可能使用 | CommonsMultipartResolver |
