【问题标题】:How can I specify a GridFS bucket when executing find() using gridfs-stream使用 gridfs-stream 执行 find() 时如何指定 GridFS 存储桶
【发布时间】:2017-11-21 21:48:13
【问题描述】:

使用gridfs-stream,查找和获取文件时如何指定bucket名称?

我的问题是在 How can I specify a GridFS bucketHow can I specify a GridFS bucketstackoverflow 上发现的以下问题的后续问题

那里的解决方案提供了一个示例,说明在我调用 createWriteStream 时如何指定存储桶。根据@vsivsi 提供的代码,我可以使用以下代码中的“root”选项将文件添加到我的自定义存储桶中:

// fyi, req.file has been populated using multer
var gfs = Grid(mongoose.connection.db);
var writeStream = gfs.createWriteStream({
    filename: req.file.originalname,
    mode: 'w',
    content_type: req.file.mimetype,
    root: 'private'
});

这成功地将我的文件添加到 private.files 和 private.chunks。 所以现在我想查找并阅读我上传的文件。我的不使用桶的 find() 看起来像这样:

var gfs = Grid(mongoose.connection.db);
gfs.find({
    filename: req.params.filename
}).toArray(function(err, files){ 
     // bunch of processing here... 
});

现在我如何知道要查询哪个存储桶/根?

我假设我在调用 createReadStream() 时能够使用相同的“root”选项,但首先我需要找到它。有没有办法告诉 gridfs-stream 使用哪个桶/根?

【问题讨论】:

    标签: javascript mongodb gridfs bucket gridfs-stream


    【解决方案1】:

    我想我找到了自己的答案。查看gridfs-write的源码,发现原型如下:

    Grid.prototype.collection = function (name) {
      this.curCol = name || this.curCol || this.mongo.GridStore.DEFAULT_ROOT_COLLECTION;
      return this._col = this.db.collection(this.curCol + ".files");
    }
    

    所以我现在可以使用以下命令搜索我的存储桶:

    var gfs = Grid(mongoose.connection.db);
    gfs.collection('private').find({
      filename: req.params.filename
    }).toArray(function(err, files){
        // handle err and no files...
        let readStream = gfs.createReadStream({
            filename: files[0].filename,
            root: 'private'
        });
        // ... etc. ...
    });
    

    希望这可以帮助其他可能来寻找它的人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2016-07-06
      • 2013-06-12
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      相关资源
      最近更新 更多