我正在尝试将spring boot 1.5.7迁移到其最新版本的realease 2.0.1。在旧版本中,我使用此语法来恢复文件。
GridFSDBFile gridFsdbFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(fileId)));
你知道在新版本中会怎么做吗?我需要
file.setInputStream(gridFsdbFile.getInputStream());
公司!
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);
}
让它保持不变的临时解决方案是包含依赖关系
<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
似乎自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)