如何将字符串转换为二进制缓冲区?

时间:2014-01-29 16:38:35

标签: node.js

我有两段代码:

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('https://www.google.pl/images/srpr/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'
    }
})

所以第一个从本地磁盘检查mime类型的文件及其'image / png'。 第二个从url下载url(它的png格式的google徽标)中的图像并检查其mime类型,它是'application / octet-stream'。

如何将request(这是一个字符串)的响应转换为二进制缓冲区,以便mime检测返回'image / png'??

1 个答案:

答案 0 :(得分:3)

您必须传递选项encoding: null

var mmmagic = require('mmmagic')
, request = require('request')
, magic = new mmmagic.Magic(mmmagic.MAGIC_MIME_TYPE)
, image = 'https://www.google.pl/images/srpr/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'
    });
});

我注意到data在使用request.get(<urlString>)时是一个字符串。出于调试目的,我使用了typeof <something>&amp; <something>.constructor确定<something>到底是什么。

文档有点误导,说明

  

encoding - 要在响应数据的setEncoding上使用的编码。如果为null,则将主体作为缓冲区返回。

让人认为默认值是缓冲区!