I need to get the file type of a file with the help of node.js to set the content type. I know I can easily check the file extension but I've also got files without extension which should have the content type image/png
, text/html
aso.
This is my code (I know it doesn't make much sense but that's the base I need):
var http = require("http"),
fs = require("fs");
http.createServer(function(req, res) {
var data = "";
try {
/*
* Do not use this code!
* It's not async and it has a security issue.
* The code style is also bad.
*/
data = fs.readFileSync("/home/path/to/folder" + req.url);
var type = "???"; // how to get the file type??
res.writeHead(200, {"Content-Type": type});
} catch(e) {
data = "404 Not Found";
res.writeHead(404, {"Content-Type": "text/plain"});
}
res.write(data);
res.end();
}).listen(7000);
I haven't found a function for that in the API so I would be happy if anyone can tell me how to do it.
There is a helper library for looking up mime types https://github.com/broofa/node-mime
var mime = require('mime'); mime.getType('/path/to/file.txt'); // => 'text/plain'
But it still uses the extension for lookup though
Have a look at the mmmagic module. It is a libmagic binding and seems to do exactly what you want.
You should have a look at the command line tool file
(Linux). It attempts to guess the filetype based on the first couple of bytes of the file. You can use child_process.spawn
to run it from within node.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With