如何从CollectionFS获取文件(映像)的缓冲区

我试图插入一个图像到PDF我创buildPDFkit的服务器端。 我正在使用cfs:dropbox来存储我的文件。 在使用cvs:filesystem之前,很容易将这些图像添加到我的pdf中,因为它们就在那里。 现在,他们远程存储,我不知道如何添加它们,因为PDFkit不支持添加图像只有url。 但是,它会接受一个缓冲区。 我怎样才能从我的CollectionFS文件缓冲区?

到目前为止,我有这样的东西:

var portrait = Portraits.findOne('vS2yFy4gxXdjTtz5d'); readStream = portrait.createReadStream('portraits'); 

到目前为止,我尝试了两种方法:

首先使用dataMan,但最后的命令永远不会回来:

 var dataMan = new DataMan.ReadStream(readStream, portrait.type()); var buffer = Meteor.wrapAsync(Function.prototype.bind(dataMan.getBuffer, dataMan))(); 

其次手动缓冲stream:

 var buffer = new Buffer(0); readStream.on('readable', function() { buffer = Buffer.concat([buffer, readStream.read()]); }); readStream.on('end', function() { console.log(buffer.toString('base64')); }); 

那似乎也不会回来。 我仔细检查了我的文档,确保它在那里,它有一个有效的url,当我把url放在浏览器中时,图片就出现了。 我错过了什么吗?

我不得不做类似的事情,因为这个问题没有答案,我是这样做的:

 // take a cfs file and return a base64 string var getBase64Data = function(file, callback) { // callback has the form function (err, res) {} var readStream = file.createReadStream(); var buffer = []; readStream.on('data', function(chunk) { buffer.push(chunk); }); readStream.on('error', function(err) { callback(err, null); }); readStream.on('end', function() { callback(null, buffer.concat()[0].toString('base64')); }); }; // wrap it to make it sync var getBase64DataSync = Meteor.wrapAsync(getBase64Data); // get a cfs file var file = Files.findOne(); // get the base64 string var base64str = getBase64DataSync(file); // get the buffer from the string var buffer = new Buffer(base64str, 'base64') 

希望它会帮助!