我有两段代码:
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'??
答案 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,则将主体作为缓冲区返回。
让人认为默认值是缓冲区!