SpringBoot-Web开发之文件上传
页面表单
- enctype:encode type,编码类型
- multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据,支持多类型文件上传,图片音频等
- 默认情况下,enctype的值是application/x-www-form-urlencoded,只能上传文本格式的文件
<form method="post" action="/upload" enctype="multipart/form-data"><!-- 单文件选择--><input type="file" name="file"><br><!-- 多文件选择--><input type="file" name="photos" multiple><br><input type="submit" value="提交">
</form>处理方法
//MultipartFile 自动封装上传过来的文件
@PostMapping("upload")
public String upload(@RequestParam("email")String email,@RequestParam("username")String username,@RequestPart("headerImg")MultipartFile headerImg,@RequestPart("photos")MultipartFile[] photos) throws IOException {log.info("上传的信息:email={},username={},headerImg={},photos={}",email,username,headerImg.getSize(),photos.length);if (!headerImg.isEmpty()) {//保存文件,例如OSS服务器(阿里云对象存储服务器)String headerImgName=headerImg.getOriginalFilename();headerImg.transferTo(new File("D:\\aaa\\admin\\" + headerImgName));}if (photos.length > 0) {for (MultipartFile photo : photos) {String photoName=photo.getOriginalFilename();photo.transferTo(new File("D:\\aaa\\admin\\" + photoName));}}log.info("上传完成================================");return "main";
}修改默认配置
spring:servlet:multipart:max-file-size: 10MB # 单个上传文件大小上限max-request-size: 100MB # 一次请求上传所有文件大小上限文件上传执行步骤
1. 自动配置好了 StandardServletMultipartResolver 【文件上传解析器】

3. doDispatch()查找controller目标方法之前,都会检查当前请求是否是文件上传

4. 检查请求
- 使用文件上传解析器判断(isMultipart)
- 封装(resolveMultipart,返回MultipartHttpServletRequest)文件上传请求


5. 参数解析器来解析请求中的文件内容封装成MultipartFile
- 将request中文件信息封装为一个Map;MultiValueMap<String, MultipartFile>



