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>