【问题标题】:GridFSDBFile in spring boot 2.0.1 releaseSpring Boot 2.0.1 版本中的 GridFSDBFile
【发布时间】:2018-09-28 15:53:21
【问题描述】:

我正在尝试将 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!

【问题讨论】:

    标签: java spring mongodb maven spring-boot


    【解决方案1】:
    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);
    }
    

    【讨论】:

    • 如何保存文件,我正在尝试:ObjectId id = gridFsTemplate.store(inputStream, filename, contentType, metaData); return Mono.just(id.toString()).block();
    • 我在仅使用 gridFsTemplate.getResource(gridFSFile.getFilename()); 加载 PDF 内容时遇到问题,导致文件格式错误:找不到 startxref 这解决了我的问题,非常感谢
    【解决方案2】:

    似乎从 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)
    

    【讨论】:

      【解决方案3】:

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

      <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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-26
        • 2018-10-03
        • 1970-01-01
        • 2023-03-20
        • 2020-02-16
        • 2015-09-20
        • 2021-01-12
        • 1970-01-01
        相关资源
        最近更新 更多