Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
28
rated 0 times [  33] [ 5]  / answers: 1 / hits: 18485  / 13 Years ago, mon, december 12, 2011, 12:00:00

My current method is this:



var request = require('request');
var mime = require('mime');
var fs = require('fs');
var uri = 'http://www.sweetslyrics.com/images/img_gal/25646_christina-perri-213968.jpg';
request({
'method':'GET',
'uri': uri
},function(err, response,body){
var tmp_path = '/tmp/123456';
fs.writeFile(tmp_path, body, function(err) {
console.log(mime.lookup(tmp_path)); //application/octet-stream ?????
});
});


The image is obviously a picture, but node-mime says it's application/octet-stream. Why?



Note:
- I do not want to rely on the Response Headers content-type, because based on my experience, sometimes those response headers are set incorrectly...and they do not determine the true file type. (that's why I save it to a file, and then have node-mime determine it for me!)



I want to know the best way to determine if a file is an image, with 0 margin of error.



Edit: I just realized that node-mime isn't magic. It just checks for the extension :( ...



Edit2: I found this: https://github.com/SaltwaterC/mime-magic


More From » http

 Answers
279

Just read the first bytes of the stream, and check it for the so called "magic number".



Magic numbers are the first bits of a file which uniquely identify the
type of file.



For example:

-Every JPEG file begins with ff d8 (hex).

-Every png file begins with a 89 50 4e 47.

-There is a comprehensive table of magic numbers here


This way even if you have a file without extension you can still detect its type.

Hope this helps.


[#88606] Saturday, December 10, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
billosvaldor

Total Points: 601
Total Questions: 113
Total Answers: 113

Location: Iceland
Member since Sat, Sep 17, 2022
2 Years ago
;