- <form method="post" action="/upload" enctype="multipart/form-data">
- //上传单文件
- <div>
- <label for="exampleInputFile">头像label>
- <input type="file" name="headerImg">
- div>
- //上传多个文件
- <div>
- <label for="exampleInputFile">生活照label>
- <input type="file" name="photos" multiple>
- div>
- <button type="submit">提交button>
- form>
- @PostMapping("/upload")
- public String upload(@RequestParam("email") String email,
- @RequestParam("username") String username,
- @RequestPart("headerImg") MultipartFile headerImg,
- @RequestPart("photos") MultipartFile[] photos) throws IOException {
- //处理单文件上传
- if(!headerImg.isEmpty()){
- String originalFilename = headerImg.getOriginalFilename();
- headerImg.transferTo(new File("H:\\cache\\"+originalFilename));
- }
-
- //处理多文件上传
- if(photos.length > 0){
- for (MultipartFile photo : photos) {
- if(!photo.isEmpty()){
- String originalFilename = photo.getOriginalFilename();
- photo.transferTo(new File("H:\\cache\\"+originalFilename));
- }
- }
- }
- return "main";
- }
文件上传自动配置类-MultipartAutoConfiguration->MultipartProperties,
1、请求进来使用文件上传解析器判断(isMultipart)并封装文件上传请求(resolveMultipart,返回MultipartHttpServletRequest)
2、参数解析器来解析请求中的文件内容,封装成MultipartFile
3、将request中文件信息封装为一个Map;MultiValueMap<String, MultipartFile>
4、使用FileCopyUtils实现文件流的拷贝