欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring从MongoDB中下载文件之GridFS

程序员文章站 2023-12-24 17:16:45
...

问题

之前提到过以GridFS方式上传问题到MongoDB中:Spring保存文件到MongoDB之GridFS支持。现在需要从Mongodb中读取文件,应该怎么处理类?

解决

Maven

<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-mongodb</artifactId>
	<version>2.0.5.RELEASE</version>
</dependency>

注解mongoDbFactory

@Autowired
private MongoDbFactory mongoDbFactory;

获取文件流

String fileId = "5602de6e5d8bba0d6f2e45e4";
// 从Mongod中查找出一个文件,注意这里返回为com.mongodb.client.gridfs.model.GridFSFile类
GridFSFile gridFsdbFile = operations.findOne(new Query(Criteria.where("_id").is(fileId)));
if (gridFsdbFile != null) {
        // mongo-java-driver3.x以上的版本就变成了这种方式获取
        GridFSBucket bucket = GridFSBuckets.create(mongoDbFactory.getDb());
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        // 获取Mongodb中文件的缓存输出流
        bucket.downloadToStream(gridFsdbFile.getId(), baos);
        ...
} 

**Note:**其中operationsSpring保存文件到MongoDB之GridFS支持里面的GridFsOperations类为org.springframework.data.mongodb.gridfs.GridFsOperations;其中GridFSFilecom.mongodb.client.gridfs.model.GridFSFile类。 获取到输出流,到这里之后就是Java流操作的事情了。

总结

spring-data-mongodb从2.0版本开始,其中GridFsOperations#findOne方法,返回类型为com.mongodb.client.gridfs.model.GridFSFile,不是再为com.mongodb.gridfs.GridFSDBFile类型。所以,这里就不得不用GridFSBucket来获取文件。

参考: 2.0版本GridFsOperations#findOne 1.9.9版本GridFsOperations#findOne GridFS in Spring Data MongoDB Java项目中对MongoDB数据库进行文件上传

转载于:https://my.oschina.net/fxtxz2/blog/1828912

上一篇:

下一篇: