Node.js - Файловая система получает тип файла, решение около 2012 года

Мне нужно получить файл типа файла с помощью 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, поэтому я был бы рад, если кто-нибудь сможет мне сказать, как это сделать.

Ответ 1

Посмотрите на mmmagic module. Это libmagic binding и, похоже, делает именно то, что вы хотите.

Ответ 2

Существует вспомогательная библиотека для поиска типов пантомимы https://github.com/broofa/node-mime.

var mime = require('mime');

mime.getType('/path/to/file.txt');         // => 'text/plain'

Но он все еще использует расширение для поиска, хотя

Ответ 3

Вам следует взглянуть на инструмент командной строки file (Linux). Он пытается угадать тип файла на основе первых двух байтов файла. Вы можете использовать child_process.spawn для запуска изнутри node.

Ответ 4

Вы хотите посмотреть тип mime, и, к счастью, узел имеет удобную библиотеку только для этого:

https://github.com/bentomas/node-mime#readme

редактировать:

Вероятно, вам стоит заглянуть в статический сервер ресурсов и не устанавливать его сами. Вы можете использовать express, чтобы сделать это очень легко, или целый набор статических файловых модулей, например, ecstatic. С другой стороны, вы, вероятно, должны использовать nginx для обслуживания статических файлов.

Ответ 5

Решение 2018

Похоже, что принятый ответ имеет зависимость от Python, а остальные ответы либо устарели, либо предполагают, что имя файла имеет какое-то расширение.

Пожалуйста, найдите мой более актуальный ответ здесь

Ответ 6

Я использовал это:

npm install mime-types

И внутри кода:

var mime = require('mime-types');
tmpImg.contentType = mime.lookup(fileImageTmp);

Где fileImageTmp - это копия изображения, хранящегося в файловой системе (в данном случае tmp).

В результате я вижу: image/jpeg