2

I have two pieces of code:

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

and

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

So first one checks mime type of file from local disk and its 'image/png'. The second one downloads image from url (its google logo in png format) from url and check its mime type and it is 'application/octet-stream'.

How I can convert response from request (which is a string) to a binary buffer so mime detection would return 'image/png'??

1 Answer 1

3

You have to pass in the option 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'
    });
});

I noticed that data was a string when using request.get(<urlString>). For debugging purposes I used typeof <something> & <something>.constructor to determine what <something> really was.

The docs are a little misleading stating that

encoding - Encoding to be used on setEncoding of response data. If null, the body is returned as a Buffer.

Making one think that the default would be a Buffer!

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.