前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重写GridFsTemplate类, MongoDB文件库实现同名文件共存 顶

重写GridFsTemplate类, MongoDB文件库实现同名文件共存 顶

作者头像
Michael Chen
发布2018-09-05 10:53:06
2.3K0
发布2018-09-05 10:53:06
举报
文章被收录于专栏:SpringSpace.cn

在MongoDB库中使用GridFsTemplate给基于Spring Boot的项目在进行文件的存储和读取操作提供了很大的便利,但是在使用过程中要获取MongDB库内文件的InputStream时,却仅有如下方法获取:

代码语言:javascript
复制
public GridFsResource getResource(String location) {
    GridFSFile file = findOne(query(whereFilename().is(location)));
    return file != null ? new GridFsResource(file, getGridFs().openDownloadStream(location)) : null;
}

这种方法的好处是在库内不存在多个同名文件时可以通过简单的文件名获取到文件的InputStream进行下载操作,但是在一个共享库规模大,出现多个同名不同内容的文件时,以上方法就存在局限性了,因此通过重写GridFsTemplate类的以上方法,可以简单的实现单库内多个同名文件的区别存储和读取操作,简要示例代码如下:

代码语言:javascript
复制
@Component
public class GridFsAssistant {

    @Value("${spring.data.mongodb.database}")
    private String database;

    private final MongoClient mongoClient;

    @Autowired
    public GridFsAssistant(MongoClient mongoClient) {
        this.mongoClient = mongoClient;
    }

    public MongoDatabase getMongoDB(String databaseName) {
        return mongoClient.getDatabase(databaseName);
    }

    public MongoDatabase getDefaultMongoDB() {
        return getMongoDB(database);
    }

    public GridFSDownloadStream getResource(ObjectId storedId) {
        GridFSBucket gridFSBucket = GridFSBuckets.create(getDefaultMongoDB());
        MongoCollection<Document> coll = getDefaultMongoDB().getCollection("fs.files");
        FindIterable<Document> file = coll.find(eq("_id", storedId));
        return file.first() != null ? gridFSBucket.openDownloadStream(storedId) : null;
    }
}

以上是在使用GridFS进行MongDB文件存储及下载实现过程中发现的一个小问题,详细项目代码参见以下文档共享服务项目V0.1版本:

码云地址:https://gitee.com/mxleader/quick-doc-service

GitHub:     https://github.com/cbcgorilla/quick-doc-service

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档