SpringBoot是一个轻量级的JavaEE(Enterprise Edition)应用程序框架,集成MongoDB实现文件上传功能是一种非常实用的功能。下面,将详细讲解SpringBoot集成MongoDB实现文件上传功能的完整攻略。
- 创建SpringBoot项目
首先,需要创建一个SpringBoot项目,并添加相应的依赖。
在pom.xml文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.5</version>
</dependency>
- 编写文件上传Controller
在编写Controller的时候,可以使用SpringMVC框架提供的文件上传相关注解。
示例代码:
@RestController
public class FileUploadController {
@Autowired
private GridFSBucket gridFSBucket;
@PostMapping("/upload")
public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) {
try {
DBObject metaData = new BasicDBObject();
metaData.put("type", file.getContentType());
metaData.put("size", file.getSize());
ObjectId objectId = gridFSBucket.uploadFromStream(file.getOriginalFilename(), file.getInputStream(), metaData);
return ResponseEntity.ok(objectId.toHexString());
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("上传文件出错!");
}
}
}
上述代码中,使用GridFSBucket完成文件的上传操作,其中metadata是存储的文件的一些附加属性,使用MongoDB的ObjectId作为文件的唯一标识。
- 添加MongoDB配置
在application.properties文件中添加MongoDB的相关配置。
示例代码:
spring.data.mongodb.database=fileupload
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
- 运行测试
启动SpringBoot项目,并使用Postman等RESTful测试工具,请求文件上传接口。
示例代码:
请求接口:
POST http://localhost:8080/upload
请求参数:
file:在Body中选择文件
响应结果:
200 OK
文件上传成功
- 文件下载
在编写下载文件的Controller时,使用GridFSBucket将MongoDB中的文件流输出到输出流中。
示例代码:
@GetMapping("/download")
public void downloadFile(@RequestParam("id") String id, HttpServletResponse response) throws IOException {
GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(new ObjectId(id));
GridFSFile gridFSFile = gridFSDownloadStream.getGridFSFile();
// 设置响应头
response.setContentType(gridFSFile.getMetadata().get("type").toString());
response.setHeader("Content-Disposition", "attachment; filename=" + gridFSFile.getFilename());
response.setHeader("Cache-Control", "private,no-cache,no-store");
IOUtils.copy(gridFSDownloadStream, response.getOutputStream());
}
上述代码中,使用GridFSDownloadStream获取MongoDB中的文件流,然后将流复制到输出流中,浏览器就可以自动下载该文件了。
总结
本文讲述了如何在SpringBoot项目中集成MongoDB实现文件上传和下载的功能。通过使用GridFS技术,可以很方便地实现大文件的读写操作,提高了系统的性能和可用性。以上是两条示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 集成MongoDB实现文件上传功能 - Python技术站