2014-01-29 102 views
2

我有兩段代碼:如何將字符串轉換爲二進制緩衝區?

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' 
    } 
}) 

所以第一個檢查默從本地磁盤和它的「形象/ PNG」文件的類型。 第二個從url下載url(url格式的google徽標)圖片,並檢查它的MIME類型,它是'application/octet-stream'。

如何將request(它是一個字符串)的響應轉換爲二進制緩衝區,以便MIME檢測返回'image/png'?

回答

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> & <something>.constructor來確定<something>究竟是什麼。

該文檔是有點誤導指出

編碼 - 編碼到響應數據的setEncoding使用。如果爲null,則主體將作爲緩衝區返回。

讓人認爲默認是緩衝!

+0

這也適用於request.get! – hereandnow78

+0

完美!非常感謝! – user606521

相關問題