SpringBoot实现文件上传

文章目录

  • 系统页面
  • 前端表单
  • 后端代码
  • 文件上传源码解析

系统页面

SpringBoot实现文件上传_第1张图片

前端表单

想要实现多文件上传 输入框中使用multiple
SpringBoot实现文件上传_第2张图片

后端代码

@Slf4j
@Controller
public class FormTestController {

    /**
     * 文件上传 post表单提交 MultipartFile 自动封装上传过来的文件
     *
     * @param email 邮箱
     * @param username 名字
     * @param headerImg 头像
     * @param photos 生活照(可多选)
     * @return
     */
    @PostMapping("/uploadForm")
    public String uploadForm(@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()) {
            String filename = headerImg.getOriginalFilename();
            headerImg.transferTo(new File("D://" + filename));
        }
        //生活照不为空
        if (photos.length > 0) {
            for (MultipartFile photo : photos) {
                if (!photo.isEmpty()) {
                    String filename = photo.getOriginalFilename();
                    photo.transferTo(new File("D://" + filename));
                }
            }
        }
        return "main";
    }

}

如文件上传过大,会报错,查看源码MultipartAutoConfigration找到MultipartProperties=发现文件大小默认最大1MB 上传最大大小为10MB

SpringBoot实现文件上传_第3张图片
可通过配置文件对文件大小以及上传大小进行修改

SpringBoot实现文件上传_第4张图片

文件上传源码解析

  • SpringBoot自动配置好了文件上传解析器-StandardServletMultipartResolver
  • 通过断点调试方法 测试文件上传步骤
  • DispathcerServletdoDispatch方法打上断点
    SpringBoot实现文件上传_第5张图片
  • 记录文件上传是否被解析
  • 检测是否为文件上传请求 调用isMultipart方法判断
  • 封装resolveMultipart并返回MutipartHttpServletRequest文件上传请求
  • 参数解析器来解析请求中的文件内容封装成MultipartFile
  • 将request请求的文件信息封装成一个Map

感谢观看~

你可能感兴趣的:(spring,boot,java,spring)