2012-05-03 9 views
17

Ho bisogno di ottenere il tipo di file di un file con l'aiuto di node.js per impostare il tipo di contenuto. So che posso controllare facilmente l'estensione del file ma ho anche file senza estensione che dovrebbero avere il tipo di contenuto image/png, text/html aso.Node.js - File System ottiene il tipo di file

Questo è il mio codice (lo so che non ha molto senso, ma questa è la base ho bisogno):

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); 

non ho trovato una funzione per che nel API quindi sarei felice se qualcuno può dirmi come si fa

+6

'readFileSync' on ogni richiesta? Non sembra una buona idea ... – ThiefMaster

+3

@ThiefMaster Come ha detto questo è solo un codice fittizio (almeno questo è quello che penso "So che questo non fa molto [senso] ma questa è la base di cui ho bisogno" è supposto per dire). –

risposta

14

Date un'occhiata al mmmagic module. È una rilegatura libagica e sembra fare esattamente quello che vuoi.

+3

Supponendo che' fs.stat' faccia ciò che 'stat' fa: esattamente come una qualsiasi delle informazioni che ottieni può aiutarlo a determinare il tipo MIME di il file? – ThiefMaster

+1

In realtà non lo so, presumo che ti direbbe qualcosa di utile: P – Raynos

+8

@Raynos: visto che non hai idea, perché hai persino commentato? Questa è la migliore risposta ancora. – Ashe

10

Si dovrebbe dare un'occhiata allo strumento da riga di comando file (Linux). Cerca di indovinare il tipo di file basato sulla prima coppia di byte del file. È possibile utilizzare child_process.spawn per eseguirlo dal nodo.

5

Volete essere alla ricerca il tipo MIME, e per fortuna nodo ha una libreria a portata di mano solo per questo:

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

edit:

Probabilmente si dovrebbe guardare in un server di risorsa statica e non impostare nessuna di queste cose da solo. È possibile utilizzare express per farlo in modo molto semplice oppure è disponibile un intero host di moduli di file statici, ad es. ecstatic. D'altra parte dovresti probabilmente usare nginx per servire comunque file statici.

+5

A seconda di cosa vuole fare, ottenere il tipo basato sul nome del file potrebbe non essere la soluzione migliore. – ThiefMaster

+0

Ah sì, d'accordo. – timoxley

24

C'è una libreria di supporto per la ricerca di tipi MIME https://github.com/broofa/node-mime

var mime = require('mime'); 

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

ma utilizza ancora l'estensione per la ricerca anche se

+2

In realtà quella libreria è molto bella ma, come ThiefMaster ha commentato la risposta di timeoxly, si basa sull'estensione del file, quindi scaricherà i file senza estensione. – noob

+0

Penso che il tuo link sia rotto ..... – starbeamrainbowlabs

+0

'npm install mime' –