Spring從MongoDB中下載文件之GridFS

問題

以前提到過以GridFS方式上傳問題到MongoDB中:Spring保存文件到MongoDB之GridFS支持。如今須要從Mongodb中讀取文件,應該怎麼處理類?html

解決

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流操做的事情了。java

總結

spring-data-mongodb從2.0版本開始,其中GridFsOperations#findOne方法,返回類型爲com.mongodb.client.gridfs.model.GridFSFile,不是再爲com.mongodb.gridfs.GridFSDBFile類型。因此,這裏就不得不用GridFSBucket來獲取文件。spring

參考: 2.0版本GridFsOperations#findOne 1.9.9版本GridFsOperations#findOne GridFS in Spring Data MongoDB Java項目中對MongoDB數據庫進行文件上傳mongodb

相關文章
相關標籤/搜索