Spring Boot MongoDB 文件管理系统 开源实现指南
1. 概述
本文将帮助你学习如何使用 Spring Boot 和 MongoDB 构建一个简单的文件管理系统。你将学到如何使用 Spring Boot 搭建基础框架,以及如何使用 MongoDB 存储和管理文件。
1.1 系统流程
下表展示了整个文件管理系统的实现步骤及其对应的代码和注释。
步骤 | 代码 | 注释 |
---|---|---|
1. 创建Spring Boot项目 | spring init --name=file-management-system --dependencies=web,data-mongodb file-management-system |
使用 Spring Initializr 创建一个新的 Spring Boot 项目,包含 web 和 data-mongodb 依赖。 |
2. 配置MongoDB数据库 | spring.data.mongodb.uri=mongodb://localhost:27017/file-management-system |
在 application.properties 文件中配置 MongoDB 数据库连接信息。 |
3. 创建文件模型 | ```java\n |
@Document(collection = "files")
public class File {
@Id
private String id;
private String name;
private String contentType;
private long size;
private byte[] data;
// getters and setters
}| 创建一个名为 File 的 Java 类,用于表示文件模型。使用 `@Document` 注解将该类映射到 MongoDB 中的集合 "files"。 | | 4. 创建文件上传接口 |
java\n
@RestController
@RequestMapping("/api/files")
public class FileController {
@Autowired
private FileRepository fileRepository;
@PostMapping
public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) {
try {
File newFile = new File();
newFile.setName(file.getOriginalFilename());
newFile.setContentType(file.getContentType());
newFile.setSize(file.getSize());
newFile.setData(file.getBytes());
fileRepository.save(newFile);
return ResponseEntity.ok().build();
} catch (IOException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}| 创建一个名为 FileController 的 REST 控制器类,用于处理文件上传请求。使用 `@RequestMapping` 注解指定该接口的路径为 "/api/files"。使用 `@PostMapping` 注解将该方法映射到 HTTP POST 请求。在方法体内,使用 `@RequestParam("file")` 注解接收上传的文件,并保存到 MongoDB 中。 | | 5. 创建文件下载接口 |
java\n
@RestController
@RequestMapping("/api/files")
public class FileController {
@Autowired
private FileRepository fileRepository;
@GetMapping("/{id}")
public ResponseEntity<byte[]> downloadFile(@PathVariable("id") String id) {
Optional<File> fileOptional = fileRepository.findById(id);
if (fileOptional.isPresent()) {
File file = fileOptional.get();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"")
.contentType(MediaType.parseMediaType(file.getContentType()))
.contentLength(file.getSize())
.body(file.getData());
} else {
return ResponseEntity.notFound().build();
}
}
}| 在 FileController 类中添加一个新的方法 `downloadFile`,用于处理文件下载请求。使用 `@GetMapping("/{id}")` 注解将该方法映射到 HTTP GET 请求,并使用 `@PathVariable("id")` 注解接收文件的 ID。如果找到对应的文件,则返回文件的内容以及相关的响应头信息,使浏览器能够将其作为附件下载。如果未找到文件,则返回 404 错误。 | | 6. 创建文件删除接口 |
java\n
@RestController
@RequestMapping("/api/files")
public class FileController {
@Autowired
private FileRepository fileRepository;
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteFile(@PathVariable("id") String id) {
Optional<File> fileOptional = fileRepository.findById(id);
if (fileOptional.isPresent()) {
fileRepository.deleteById(id);
return ResponseEntity.ok().build();
} else {
return ResponseEntity.notFound().build();
}
}
}| 在 FileController 类中添加一个新的方法 `deleteFile`,用于处理文件删除请求。使用 `@DeleteMapping("/{id}")` 注解将该方法映射到 HTTP DELETE 请求,并使用 `@PathVariable("id")` 注解接收文件的 ID。如果找到对应的文件,则从 MongoDB 中删除该文件并返回成功状态。如果未找到文件,则返回 404 错误。 | | 7. 创建文件列表接口 |
java\n
@RestController
@RequestMapping("/api/files")
public class FileController {
@Autowired
private FileRepository fileRepository;
@GetMapping
public ResponseEntity<List<File>> getFiles() {
List<File>