【问题标题】:How to convert string into binary buffer?如何将字符串转换为二进制缓冲区?
【发布时间】:2014-02-21 14:41:45
【问题描述】:

我有两段代码:

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 下载图像(它的 google 标志为 png 格式)并检查它的 mime 类型,它是 'application/octet-stream'。

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

【问题讨论】:

    标签: node.js


    【解决方案1】:

    你必须传入选项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 来确定@​​987654327@ 的真正含义。

    文档有点误导

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

    让人认为默认是缓冲区!

    【讨论】:

    • 完美!非常感谢!
    猜你喜欢
    • 2016-09-16
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多