Ответ 1
Посмотрите на mmmagic module. Это libmagic binding и, похоже, делает именно то, что вы хотите.
Мне нужно получить файл типа файла с помощью node.js, чтобы установить тип содержимого. Я знаю, что я могу легко проверить расширение файла, но у меня также есть файлы без расширения, которые должны иметь тип содержимого image/png
, text/html
aso.
Это мой код (я знаю, что это не имеет большого смысла, но что мне нужна база):
var http = require("http"),
fs = require("fs");
http.createServer(function(req, res) {
var data = "";
try {
/*
* Do not use this code!
* It 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);
Я не нашел функцию для API, поэтому я был бы рад, если кто-нибудь сможет мне сказать, как это сделать.
Посмотрите на mmmagic module. Это libmagic binding и, похоже, делает именно то, что вы хотите.
Существует вспомогательная библиотека для поиска типов пантомимы https://github.com/broofa/node-mime.
var mime = require('mime');
mime.getType('/path/to/file.txt'); // => 'text/plain'
Но он все еще использует расширение для поиска, хотя
Вам следует взглянуть на инструмент командной строки file
(Linux). Он пытается угадать тип файла на основе первых двух байтов файла. Вы можете использовать child_process.spawn
для запуска изнутри node.
Вы хотите посмотреть тип mime, и, к счастью, узел имеет удобную библиотеку только для этого:
https://github.com/bentomas/node-mime#readme
редактировать:
Вероятно, вам стоит заглянуть в статический сервер ресурсов и не устанавливать его сами. Вы можете использовать express, чтобы сделать это очень легко, или целый набор статических файловых модулей, например, ecstatic. С другой стороны, вы, вероятно, должны использовать nginx для обслуживания статических файлов.
Решение 2018
Похоже, что принятый ответ имеет зависимость от Python, а остальные ответы либо устарели, либо предполагают, что имя файла имеет какое-то расширение.
Пожалуйста, найдите мой более актуальный ответ здесь
Я использовал это:
npm install mime-types
И внутри кода:
var mime = require('mime-types');
tmpImg.contentType = mime.lookup(fileImageTmp);
Где fileImageTmp - это копия изображения, хранящегося в файловой системе (в данном случае tmp).
В результате я вижу: image/jpeg