J'ai besoin d'obtenir le type de fichier d'un fichier à l'aide de node.js pour définir le type de contenu. Je sais que je peux facilement vérifier l'extension du fichier, mais j'ai également des fichiers sans extension qui devraient avoir le type de contenu image/png
, text/html
aso.
Voici mon code (je sais que cela n'a pas beaucoup de sens mais c'est la base dont j'ai besoin):
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);
Je n'ai pas trouvé de fonction pour cela dans le API donc je serais heureux si quelqu'un pouvait me dire comment le faire.
Jetez un œil au module mmmagic . C'est une reliure libmagique et semble faire exactement ce que vous voulez.
Il existe une bibliothèque d'aide pour rechercher les types de mime https://github.com/broofa/node-mime
var mime = require('mime');
mime.getType('/path/to/file.txt'); // => 'text/plain'
Mais il utilise toujours l'extension pour la recherche
Vous devriez jeter un œil à l'outil de ligne de commande file
(Linux). Il tente de deviner le type de fichier en fonction des deux premiers octets du fichier. Vous pouvez utiliser child_process.spawn
pour l'exécuter à partir du nœud.
Vous voulez rechercher le type mime, et heureusement, node a une bibliothèque pratique juste pour cela:
https://github.com/bentomas/node-mime#readme
éditer:
Vous devriez probablement vous pencher sur un serveur d'actifs statique et ne pas définir vous-même ces éléments. Vous pouvez utiliser express pour le faire très facilement, ou il y a tout un hôte de modules de fichiers statiques, par exemple extatique . D'un autre côté, vous devriez probablement utiliser nginx pour servir des fichiers statiques de toute façon.
Solution 2018
La réponse acceptée semble avoir une dépendance Python et les autres réponses sont obsolètes ou supposent que le nom de fichier a une sorte d'extension.
Veuillez trouver ma réponse la plus à jour ici
J'ai utilisé ceci:
npm install mime-types
Et, à l'intérieur du code:
var mime = require('mime-types');
tmpImg.contentType = mime.lookup(fileImageTmp);
Où fileImageTmp est la copie de l'image stockée sur le système de fichiers (dans ce cas tmp).
Le résultat que je peux voir est: image/jpeg