Spring Update 2.0.1版本中的GridFSDBFile

时间:2018-04-18 11:56:39

标签: java spring mongodb maven spring-boot

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

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

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

file.setInputStream(gridFsdbFile.getInputStream());

TY!

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

将其保持不变的临时解决方案是包含依赖

#include <Rinternals.h>
#include <Rdefines.h>
#include <R.h>
#include <stdlib.h>
#include <stdio.h>
SEXP processlist(SEXP lst){
   int i,j,elLength;
   int len = length(lst);
   SEXP tmp;
   char ***target = malloc(sizeof(char **)*len);
   for (i = 0;i < len; i++) {
     tmp = VECTOR_ELT(lst,i);
     elLength = length(tmp);
     target[i] = malloc(sizeof(char *) * elLength);
     for (j=0;j<elLength;j++) {
       target[i][j] = CHAR(STRING_ELT(tmp,j));
     }
   }
   printf("target[0][0]: %s\n",target[0][0]);
   printf("target[1][1]: %s\n",target[1][1]);
   printf("target[2][2]: %s\n",target[2][2]);
   for (i=0;i<len;i++)
     free(target[i]);
   free(target);
   return R_NilValue;
}

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

答案 2 :(得分: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)