SpringBoot 文件上传和自动装配原理

922 阅读1分钟

自动装配原理

查看源码 image.png 文件上传自动配置类-MultipartAutoConfiguration- MultipartProperties

自动配置好了 StandardServletMultipartResolver 【文件上传解析器】

原理步骤

1.请求进来使用文件上传解析器判断( isMultipart )并封装( resolveMultipart,返回MultipartHttpServletRequest )文件上传请求 image.png

如何是文件上传请求,会重新包装request。可以通过processedRequest != request是否相等,来确定确定当前请求是否为文件上传请求。 image.png

2.参数解析器来解析请求中的文件内容封装成MultipartFile

3.将request中文件信息封装为一个Map; MultiValueMap<String, MultipartFile> image.png

FileCopyUtils。实现文件流的拷贝

@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 originalFilename = headerImg.getOriginalFilename();  //获取文件上传的源文件名
        headerImg.transferTo(new File("D:\upload\"+originalFilename));
    }

    if(photos.length>0){
        for (MultipartFile photo : photos) {
            if(!photo.isEmpty()){
                String originalFilename = photo.getOriginalFilename();
                photo.transferTo(new File("D:\upload\"+originalFilename));
            }
        }
    }

    return "main";
}
```
```