gpt4 book ai didi

node.js - 从 Gridfs 读取 block 并转换为缓冲区

转载 作者:可可西里 更新时间:2023-11-01 10:02:52 26 4
gpt4 key购买 nike

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

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。我真的很想检索流中的所有 block 并将它们传递给另一个变量,以便我可以重用这些 block 在另一个 API 中绘制图像。因此我使用 image_buf 和 Buffer 来执行任务。但是,我得到了一个完全不同的缓冲区字符串。在上面的代码中可以看到,我对得到的chunk和image_buf进行了console,但是它们是完全不同的。谁能告诉我这样做的原因以及如何正确收集所有 block ?非常感谢!!!

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

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

最佳答案

问题发布者提供的更新不起作用。所以我要提供我自己的答案。与其使用 new Buffer('buffer') 不如使用一个简单的数组并将 block 插入其中并在最后使用 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);
})

关于node.js - 从 Gridfs 读取 block 并转换为缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38763080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com