2025年12月08日/ 浏览 25
正文:
在现代Web应用中,文件上传与下载是常见的功能需求,无论是用户头像上传、文档管理还是数据导出,都离不开文件操作。Java作为企业级开发的主流语言,提供了丰富的API和框架支持来实现这些功能。本文将结合Spring Boot框架,分享文件管理模块的开发经验,包括上传下载的实现、性能优化和常见问题处理。
文件上传通常通过HTTP的multipart/form-data请求实现。在Spring Boot中,可以使用MultipartFile类来处理上传的文件。以下是一个简单的上传示例:
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "文件为空,上传失败";
}
try {
// 获取文件名并生成存储路径
String fileName = file.getOriginalFilename();
Path path = Paths.get("/upload-dir/" + fileName);
Files.write(path, file.getBytes());
return "上传成功: " + fileName;
} catch (IOException e) {
return "上传失败: " + e.getMessage();
}
}
这段代码通过MultipartFile接收文件,检查非空后将其写入服务器指定目录。需要注意的是,上传目录需提前创建,并考虑文件重名和安全性问题(如防止路径遍历攻击)。实际项目中,建议对文件名进行重命名(如使用UUID),并限制文件类型和大小(通过配置spring.servlet.multipart.max-file-size)。
文件下载需设置HTTP响应头,指定内容类型和附件名称。以下示例展示了如何从服务器读取文件并返回给客户端:
@GetMapping("/download")
public ResponseEntity downloadFile(@RequestParam String fileName) {
try {
Path filePath = Paths.get("/upload-dir/" + fileName);
Resource resource = new UrlResource(filePath.toUri());
if (resource.exists()) {
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
.body(resource);
} else {
return ResponseEntity.notFound().build();
}
} catch (IOException e) {
return ResponseEntity.status(500).build();
}
}
此代码通过ResponseEntity灵活设置响应状态和头信息,确保浏览器正确识别文件类型并触发下载。需注意文件路径的安全性,避免通过文件名参数直接访问系统敏感文件。
文件管理模块虽基础,却涉及性能、安全等多方面考量。通过Spring Boot的便捷API和合理的设计,可以快速实现稳定可靠的文件上传下载功能。开发中务必结合实际场景优化细节,才能构建出高效的企业级应用。