springboot上传文件并支持读取如何实现
时间: 2024-11-22 17:48:48 浏览: 7
SpringBoot实现文件上传接口
Spring Boot 用于文件上传和读取通常涉及使用MultipartFile对象,这是Spring MVC框架的一部分,它代表一个HTTP请求体中的文件。以下是基本步骤:
1. **配置MultipartResolver**: 首先,在`application.properties`或`application.yml`中启用Multipart uploads,并指定最大文件大小:
```yaml
server.multipart.enabled=true
server.multipart.max-file-size=5MB
```
2. **处理Controller**:
创建一个Controller方法接收文件上传。使用`@RequestParam`注解从请求体获取文件,如:
```java
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
// 检查文件是否上传成功
if (file.isEmpty()) {
return "Error: No file uploaded";
}
try {
// 将文件保存到本地存储路径
saveUploadedFile(file, "/path/to/save");
} catch (IOException e) {
throw new RuntimeException("Failed to save the file", e);
}
return "File uploaded successfully";
}
```
3. **保存文件**:
使用`FileSystemResource`或`CommonsMultipartFile`将文件保存到服务器的某个目录。例如:
```java
private void saveUploadedFile(MultipartFile file, String targetPath) throws IOException {
File outputFolder = new File(targetPath);
if (!outputFolder.exists()) {
outputFolder.mkdirs();
}
File outputFile = new File(outputFolder, file.getOriginalFilename());
file.transferTo(outputFile);
}
```
4. **读取文件**:
对于已上传的文件,你可以创建一个新的Controller方法来提供文件下载服务,比如:
```java
@GetMapping("/download/{filename}")
ResponseEntity流式下载文件(@PathVariable String filename) {
File file = new File("/path/to/save/" + filename);
// 判断文件是否存在
if (!file.exists()) {
return ResponseEntity.notFound().build();
}
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename);
return ResponseEntity.ok()
.headers(headers)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(new InputStreamResource(new FileInputStream(file)));
}
```
阅读全文