在开发中,文件的上传与下载是常见的需求。Spring Boot 为我们提供了非常便利的方式来处理文件的上传和下载。下面,我将为你详细介绍如何在 Spring Boot 中实现文件上传与下载,并汇总一些实用的技巧。
文件上传
1. 配置文件上传的Controller
首先,我们需要创建一个控制器(Controller)来处理文件上传的请求。在 Spring Boot 中,我们可以使用 @PostMapping 注解来标识这是一个 POST 请求,并且我们可以通过 @RequestParam 注解来获取上传的文件。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileUploadController {
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
// 文件保存逻辑
return "File uploaded successfully!";
}
}
2. 文件保存
在上面的例子中,我们只是简单地将文件上传的消息返回给了客户端。在实际应用中,我们通常需要将文件保存到服务器的文件系统中。
import org.springframework.web.multipart.MultipartFile;
public void saveFile(MultipartFile file) {
try {
file.transferTo(new File("/path/to/save/" + file.getOriginalFilename()));
} catch (IOException e) {
// 处理异常
}
}
3. 文件类型和大小校验
在实际应用中,我们可能需要对上传的文件类型和大小进行校验。这可以通过 MultipartFile 接口的 getContentType() 和 getSize() 方法来实现。
if (!file.getContentType().startsWith("image/")) {
throw new IllegalArgumentException("Unsupported file type");
}
if (file.getSize() > 5 * 1024 * 1024) { // 5MB
throw new IllegalArgumentException("File size should be less than 5MB");
}
文件下载
1. 创建下载的接口
文件下载可以通过创建一个返回 InputStream 的接口来实现。我们可以使用 @GetMapping 注解来标识这是一个 GET 请求。
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FileDownloadController {
@GetMapping("/download/{fileName:.+}")
public ResponseEntity<InputStreamResource> downloadFile(@PathVariable String fileName) {
InputStreamResource resource = new InputStreamResource(new FileInputStream("/path/to/file/" + fileName));
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"")
.body(resource);
}
}
2. 文件流处理
在上面的例子中,我们使用了 InputStreamResource 来创建一个资源流。这样可以确保文件能够正确地被传输到客户端。
总结
通过上述介绍,我们可以看到,在 Spring Boot 中实现文件的上传和下载是非常简单的。只需要配置合适的控制器和方法,就可以轻松处理文件的传输。同时,我们还可以通过一些实用的技巧来增强文件处理的功能,例如文件类型和大小的校验。
希望这些技巧能够帮助你更高效地处理文件上传和下载的需求。