Spring Update 2.0.1版本中的GridFSDBFile

问题描述 投票:3回答:3

我正在尝试将spring boot 1.5.7迁移到其最新版本的realease 2.0.1。在旧版本中,我使用此语法来恢复文件。

GridFSDBFile gridFsdbFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(fileId)));

你知道在新版本中会怎么做吗?我需要

file.setInputStream(gridFsdbFile.getInputStream());

公司!

java spring mongodb maven spring-boot
3个回答
2
投票
GridFSFile gridFsdbFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id)));

GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFsdbFile.getObjectId());
GridFsResource gridFsResource = new GridFsResource(gridFsdbFile,gridFSDownloadStream );

然后

file.setInputStream(gridFsResource.getInputStream());

您可以像这样在MongoConfiguration中定义gridFSBucket

@Bean public GridFSBucket getGridFSBuckets() {
MongoDatabase db = mongoDbFactory().getDb();
return GridFSBuckets.create(db);
}

0
投票

让它保持不变的临时解决方案是包含依赖关系

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

https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb/1.10.11.RELEASE


0
投票

似乎自Spring Boot 2.0.x GridFS操作以来一直在寻求资源方法。

鉴于GridFS中有唯一的文件名,您可以这样做:

gridFsTemplate.getResource("my-file-name.txt")

可以使用任何仲裁ID代替真实文件名,以确保其在存储文件(例如ObjectId)时的唯一性。

gridFsTemplate.store(inputStream, "5a55f1ea29485119f7a671a7")

另外在2.1.0.M3中有commit和帮助方法通过GridFSFile获取资源,但是在引擎盖下它仍然使用文件名。


为了通过纯ID获取文件内容,您可以使用以下内容:

GridFSBuckets.create(dbFactory.getDb()).openDownloadStream(gridFsFileId)
© www.soinside.com 2019 - 2024. All rights reserved.