在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中实现文件上传和下载功能。