SpringBoot文件上传(官方案例)
- 在线文档
- 项目结构
1.源码克隆:git clone https://github.com/spring-guides/gs-uploading-files.git 2.包含两个项目initial和complete,initial可以根据文档练习完善,complete是完整项目 3.功能描述:构建接受文件上传的应用程序,并且通过简单的 HTML 界面来测试文件上传下载
-
源码分析
1.POM依赖 <dependencies> <!--https://blog.csdn.net/tongxin_tongmeng/article/details/128396471--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--https://blog.csdn.net/tongxin_tongmeng/article/details/128397075--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--https://blog.csdn.net/tongxin_tongmeng/article/details/128399703--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
2.入口类 // https://blog.csdn.net/tongxin_tongmeng/article/details/128401278 @SpringBootApplication // https://blog.csdn.net/tongxin_tongmeng/article/details/128401815 @EnableConfigurationProperties(StorageProperties.class) public class UploadingFilesApplication { public static void main(String[] args) { SpringApplication.run(UploadingFilesApplication.class, args); } // https://blog.csdn.net/tongxin_tongmeng/article/details/128402169 @Bean CommandLineRunner init(StorageService storageService) { return (args) -> { storageService.deleteAll(); storageService.init(); }; } }
3.控制器 @Controller public class FileUploadController { private final StorageService storageService; // https://blog.csdn.net/tongxin_tongmeng/article/details/128402579 @Autowired public FileUploadController(StorageService storageService) { this.storageService = storageService; } // https://blog.csdn.net/tongxin_tongmeng/article/details/128405403 @GetMapping("/") public String listUploadedFiles(Model model) throws IOException { model.addAttribute("files", storageService.loadAll().map( path -> MvcUriComponentsBuilder.fromMethodName(FileUploadController.class, "serveFile", path.getFileName().toString()).build().toUri().toString()) .collect(Collectors.toList())); return "uploadForm"; } @GetMapping("/files/{filename:.+}") // https://blog.csdn.net/tongxin_tongmeng/article/details/128406009 @ResponseBody public ResponseEntity<Resource> serveFile(@PathVariable String filename) { Resource file = storageService.loadAsResource(filename); return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"").body(file); } @PostMapping("/") public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) { storageService.store(file); // https://blog.csdn.net/tongxin_tongmeng/article/details/128406963 redirectAttributes.addFlashAttribute("message", "You successfully uploaded " + file.getOriginalFilename() + "!"); return "redirect:/"; } // https://blog.csdn.net/tongxin_tongmeng/article/details/128406477 @ExceptionHandler(StorageFileNotFoundException.class) public ResponseEntity<?> handleStorageFileNotFound(StorageFileNotFoundException exc) { return ResponseEntity.notFound().build(); } }
- 项目演示