【问题标题】:Read chunk from Gridfs and convert to Buffer从 Gridfs 读取块并转换为 Buffer
【发布时间】:2016-08-04 09:08:20
【问题描述】:

我有一个关于缓冲区的问题。这是我的代码:

var Grid = require('gridfs-stream');
var mongodb = require('mongodb');
var gfs = Grid(db, mongodb);
var deferred = Q.defer();
var image_buf = new Buffer('buffer');
var readableStream = gfs.createReadStream(name);

readableStream.on('data',function(chunk){  
    console.log(chunk);
    image_buf = Buffer.concat([image_buf, chunk]);
    console.log(image_buf)//differ from the chunk above
});
readableStream.on('end',function(){
    db.close();
    deferred.resolve(image_buf);
})
return deferred.promise;

我正在做的是从 MongoDB 读取图像并将其放入 gridfs-stream 中。我真的很想检索流中的所有块并将它们传递给另一个变量,以便我可以重用这些块在另一个 API 中绘制图像。因此我使用 image_buf 和 Buffer 来执行任务。但是,我得到了一个完全不同的缓冲区字符串。正如您在上面的代码中看到的,我安慰了我得到的块和 image_buf,但它们完全不同。谁能告诉我这个的原因,我怎样才能正确地收集所有的块?非常感谢!!!

更新:好的,所以我现在想通了:我将在下面附加我的代码,供任何与我遇到相同问题的人使用:

    readableStream.on('data',function(chunk){ 
        console.log("writing!!!");
        if (!image_buf)
            image_buf = chunk;
        else image_buf = Buffer.concat([image_buf, chunk]);
    });

【问题讨论】:

  • 谢谢,这帮助了我。虽然“!image_buf”不起作用,但如果您像在第一段代码中所做的那样使用“缓冲区”初始化缓冲区,则在更新之前。它应该用一个空白字符串初始化:)

标签: node.js mongodb buffer gridfs


【解决方案1】:

问题海报提供的更新不起作用。所以我将提供我自己的答案。与其使用new Buffer('buffer'),不如使用一个简单的数组并将块推入其中,最后使用Buffer.concat(bufferArray) 来获取流的缓冲区,如下所示:

var readableStream = gfs.createReadStream(name);
var bufferArray = [];
readableStream.on('data',function(chunk){  
    bufferArray.push(chunk);
});
readableStream.on('end',function(){
    var buffer = Buffer.concat(bufferArray);
    deferred.resolve(buffer);
})

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多