2011-08-18 10 views

risposta

6

Connect automaticamente sarà imposta il tipo di contenuto, a meno che tu non lo imposti esplicitamente. Ecco lo snippet che lo fa. Esso utilizza mime.lookup e mime.charsets.lookup

// mime type 
type = mime.lookup(path); 

//<SNIP>.... 

// header fields 
if (!res.getHeader('content-type')) { 
    var charset = mime.charsets.lookup(type); 
    res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')); 
} 

Se questo non funziona per voi, pubblicare il tuo codice come il codice personalizzato è probabile che interferisce con il comportamento di default in qualche modo.

+0

'mime.lookup()' è ora rinominato in 'mime.getType()'. – Pei

8

Il numero Express documentation indica che è possibile farlo se si passa il nome del file.

var filename = 'path/to/image.png'; 
res.contentType(filename); 
// Content-Type is now "image/png" 

[Edit]

Ecco un esempio che serve i file da una directory relativa chiamato static e imposta il tipo di contenuto in base al file servito automaticamente:

var express = require('express'); 
var fs  = require('fs'); 

var app = express.createServer(); 

app.get('/files/:file', function(req, res) { 
    // Note: should use a stream here, instead of fs.readFile 
    fs.readFile('./static/' + req.params.file, function(err, data) { 
    if(err) { 
     res.send("Oops! Couldn't find that file."); 
    } else { 
     // set the content type based on the file 
     res.contentType(req.params.file); 
     res.send(data); 
    } 
    res.end(); 
    }); 
}); 

app.listen(3000); 
+0

Grazie, ma è quello che voglio evitare ... voglio solo che sia automatica sulla base di percorso o il nome del file. – mahemoff

+0

Non sono sicuro di aver capito. Puoi pubblicare un piccolo esempio? –

+0

Ho aggiornato la mia risposta con un esempio. Sto ancora fraintendendo quello che stai cercando? –

2

Express utilizza Connect, Connect utilizza Mimo e Mime include i file mime.types (con i tipi MIME predefinito da Apache) e node.types (con alcuni altri tipi hanno contribuito da comunità nodo) . Puoi semplicemente personalizzare uno di questi file all'interno della tua copia di mime in node_modules per aggiungere il tuo tipo di contenuto richiesto, oppure Mime ha anche un'API che ti permette di specificare altri tipi di contenuto o di file .types da caricare dal tuo codice.

https://github.com/broofa/node-mime

+0

L'aggiunta di definizioni mime tramite 'require (" mime "). Define (...)' non funziona. Potrebbe essere dovuto al fatto che express bundle è il proprio modulo mime? Come posso accedere al modulo mime in bundle? – panzi

24

Inoltre, se si desidera estendere i tipi MIME che esprimere (collegamento) conosce, si può fare

express.static.mime.define({'text/plain': ['md']}); 

o

connect.static.mime.define({'text/plain': ['md']}); 

PS: il mimo il modulo si trova ora a https://github.com/broofa/node-mime

0

Scarica questo database (o Another link): mime.types:, poi

var db_mimes=[],mime_ext='' 
$.get('mime.types',{},function(d){ 
    var lines=d.split('\n').filter(function(e){ /* filter which starts with #*/}) 

    lines.forEach(function(line){ 
     mime_ext=line.split(' ') 
     mime_ext[1].split(' ').forEach(function(ext){ 
      db_mimes.push({e:ext,m:mime_ext[0]}) 
     }); 
     //create object for each line . i.e: {mime:'',extension} 
    }); 


}); 

Quindi se avete fo esempio var fname="myfile.png"

var extension=fname.substr((~-this.lastIndexOf(".") >>> 0) + 2) // get extension from name 
var minme=db_mimes.filter(function(el){return el.e === extension})[0] 

+0

downvoted a causa di un collegamento interrotto –

+0

Ho cambiato il collegamento, faccio di nuovo clic e rimuovo il voto-giù: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –

+0

grazie Abdennour –

0

Eseguire il seguente cmd:

npm install xmimetype ; 

Poi, nel tuo codice:

var xm=require("xmimetype"); 

    xm.mimetypeOf("java"); 
    xm.mimetypeOf("./lib/Person.java"); 
    // -> text/x-java-source 

    xm.mimetypeOf("docx"); 
    xm.mimetypeOf("./lib/overview.docx"); 
    // -> application/vnd.openxmlformats-officedocument.wordprocessingml.document 

Per ulteriori informazioni, verificare GIT repository


L'opposto disponibili:

xm.extensionsOf("image/jpeg"); 
// -> [ 'jpeg', 'jpg', 'jpe' ] 
Problemi correlati