2012-05-03 16 views
17

Necesito obtener el tipo de archivo de un archivo con la ayuda de node.js para establecer el tipo de contenido. Sé que puedo verificar fácilmente la extensión del archivo pero también tengo archivos sin extensión que deberían tener el tipo de contenido image/png, text/html aso.Node.js - Sistema de archivos obtener tipo de archivo

Este es mi código (ya sé que no tiene mucho sentido, pero esa es la base de lo que necesito):

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

no he encontrado una función para que en el API así que sería feliz si alguien me puede decir cómo hacerlo.

+6

'readFileSync' en cada solicitud? No suena como una buena idea ... – ThiefMaster

+3

@ThiefMaster Como él dijo, esto es solo un código falso (al menos eso es lo que creo "Sé que esto no tiene mucho sentido, pero esa es la base que necesito" se supone significar). –

Respuesta

14

Tener un vistazo a la mmmagic module. Es un enlace libmagic y parece hacer exactamente lo que quieres.

+3

Suponiendo que' fs.stat' hace lo que 'stat' hace: ¿Cómo exactamente la información que obtendrá allí lo ayudará a determinar el tipo MIME de ¿el archivo? – ThiefMaster

+1

Realmente no lo sé, supongo que te diría algo útil: P – Raynos

+8

@Raynos: viendo que no tienes ni idea, ¿por qué siquiera comentaste? Esta es la mejor respuesta hasta ahora. – Ashe

10

Debe echar un vistazo a la herramienta de línea de comandos file (Linux). Intenta adivinar el tipo de archivo basado en los primeros dos bytes del archivo. Puede usar child_process.spawn para ejecutarlo desde dentro del nodo.

5

¿Quieres estar buscando el tipo mime, y afortunadamente nodo tiene una biblioteca práctica sólo por eso:

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

edición:

Probablemente debe buscar en un servidor activo estático y no establecer nada de esto usted mismo. Puede usar express para hacer esto muy fácilmente, o hay una gran cantidad de módulos de archivos estáticos, p. ecstatic. Por otro lado, probablemente debería usar nginx para servir archivos estáticos de todos modos.

+5

Dependiendo de lo que él quiera hacer, obtener el tipo basado en el nombre del archivo podría no ser la mejor idea. – ThiefMaster

+0

Ahh sí, de acuerdo. – timoxley

24

Hay una biblioteca de ayuda para buscar tipos MIME https://github.com/broofa/node-mime

var mime = require('mime'); 

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

Pero todavía utiliza la extensión de las operaciones de búsqueda, aunque

+2

En realidad, esa biblioteca es muy buena, pero como ThiefMaster ha comentado, la respuesta de timeoxly está basada en la extensión de archivo, por lo que descargará archivos sin extensión. – noob

+0

Creo que su enlace está roto ..... – starbeamrainbowlabs

+0

'npm install mime' –

Cuestiones relacionadas