在Spring Boot中實現文件上傳和下載可以通過以下步驟來實現:
@PostMapping("/upload")
public ResponseEntity<Object> uploadFile(@RequestParam("file") MultipartFile file) {
// 保存文件到本地或者存儲到數據庫
// 返回成功或者失敗的消息
}
@GetMapping("/download/{fileName}")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) {
// 從本地或者數據庫中獲取文件
Resource resource = fileStorageService.loadFileAsResource(fileName);
// 設置響應頭
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
.body(resource);
}
要實現文件上傳和下載,還需要創建一個文件存儲服務類(FileStorageService),并在該類中編寫文件保存和加載的邏輯。例如,可以使用以下方法保存上傳的文件到本地:
@Service
public class FileStorageService {
@Value("${file.upload-dir}")
private String uploadDir;
public void storeFile(MultipartFile file) {
Path filePath = Paths.get(uploadDir).resolve(file.getOriginalFilename());
try {
Files.copy(file.getInputStream(), filePath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
}
public Resource loadFileAsResource(String fileName) {
try {
Path filePath = Paths.get(uploadDir).resolve(fileName).normalize();
Resource resource = new UrlResource(filePath.toUri());
if(resource.exists()) {
return resource;
} else {
throw new FileNotFoundException("File not found " + fileName);
}
} catch (MalformedURLException | FileNotFoundException ex) {
ex.printStackTrace();
}
return null;
}
}
在上述示例中,file.upload-dir
是配置文件中配置的文件上傳目錄,可以在application.properties文件中配置:
file.upload-dir=/path/to/upload/dir
這樣就可以在Spring Boot中實現文件上傳和下載功能。