将二进制string转换为Node.js中的缓冲区

我有一个Web服务,它采用代表图像的64位编码string,使用imagemagick库创build该图像的缩略图,然后将它们存储在mongodb中。 我用下面的代码(大约)来做这个:

var buf = new Buffer(req.body.data, "base64"); //original image im.resize({ srcData: buf, width: 256 }, function(err, stdout, stderr) { this.thumbnail = new Buffer(stdout, "binary"); //store buf and stdout in mongo }); 

您会注意到我正在使用“二进制”编码创build一个Buffer对象, 文档说这不是:

'binary' – 通过仅使用每个字符的前8位将原始二进制数据编码为string的一种方法。 此编码方法已弃用,应尽可能避免使用Buffer对象。 此编码将在未来版本的Node中删除。

首先,我不确定他们在那里说什么。 我试图创build一个Buffer对象,他们似乎暗示我应该已经有一个。

其次,问题的根源似乎是imagemagick resize方法返回一个包含二进制数据的string。 做typedef(标准输出)返回“string”,并打印出来的屏幕上,肯定会显示一堆非字符数据。

那么我在这里做什么? 我无法改变imagemagick的工作方式。 有没有另一种做我想做的事情?

多数民众赞成我是如何做成功,存储在MongoDB中的图像。

 //original ---> base64 var thumbnail = new Buffer(req.body.data).toString('base64'); //you can store this string value in a mongoose model property, and save to mongodb //base64 ---> image var buffer = new Buffer(thumbnail, "base64"); 

我不确定是否将图像存储为base64是最好的方法

请试试这个,因为你的base64可能没有被预处理:

 var imgRawData = req.body.images[0].replace(/^data:image\/png;base64,|^data:image\/jpeg;base64,|^data:image\/jpg;base64,|^data:image\/bmp;base64,/, ""); var yourBuffer = new Buffer(imgRawData, "base64"); 

然后,将yourBuffer保存到MongoDB缓冲区中。