web-dev-qa-db-fra.com

Node.js - File System obtenir le type de fichier, solution autour de l'année 2012

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.

23
noob

Jetez un œil au module mmmagic . C'est une reliure libmagique et semble faire exactement ce que vous voulez.

18
ThiefMaster

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

31
250R

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.

9
Daniel Baulig

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.

6
timoxley

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

3
Stephen Paul

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

1
Andrea Girardi