2011-08-18 14 views

Odpowiedz

6

Connect automatycznie ustaw typ zawartości, chyba że ustawisz ją samodzielnie. Oto fragment, który to robi. Wykorzystuje mime.lookup i 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 : '')); 
} 

Jeśli to nie działa dla Ciebie, jak pisać kod niestandardowy kod jest prawdopodobnie zakłóca zachowanie domyślne jakoś.

+0

'mime.lookup()' jest teraz przemianowany na 'mime.getType()'. – Pei

8

Pokazuje, że może to zrobić, jeśli przekażesz nazwę pliku.

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

[Edytuj]

Oto przykład, który służy plików z względnym katalogu o nazwie static i automatycznie ustawia typ zawartości na podstawie pliku serwowane:

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

Dzięki, ale to, co chcę, aby uniknąć ... po prostu ma to być automatyczny na podstawie ścieżki lub pliku. – mahemoff

+0

Nie jestem pewien, czy rozumiem. Czy możesz podać mały przykład? –

+0

Zaktualizowałem swoją odpowiedź na przykładzie. Czy nadal nie rozumiem tego, czego szukasz? –

2

Express korzysta Połącz Connect wykorzystuje Mim, Mime i zawiera pliki mime.types (z domyślnych typów MIME z Apache) oraz node.types (z pewnymi dalszymi rodzajami wnoszonych przez społeczność węzła) . Możesz po prostu dostosować jeden z tych plików w swojej kopii mima w module node_modules, aby dodać wymagany typ zawartości, lub Mime ma również interfejs API, który pozwala określić dodatkowe typy zawartości lub pliki .types do załadowania z twojego kodu.

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

+0

Dodawanie definicji mime przez 'require (" mime "). Define (...)' nie działa. Może to dlatego, że ekspresowe pakiety to własny moduł mime? Jak uzyskać dostęp do dołączonego modułu mime? – panzi

24

Ponadto, jeśli chcesz przedłużyć MIME typy, które wyrażają (połączyć) wie o, można zrobić

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

lub

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

PS: mim moduł znajduje się teraz pod adresem https://github.com/broofa/node-mime

0

Pobierz to database (lub Another link): mime.types:, następnie

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


}); 

Następnie, jeśli masz fo przykład 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

odrzucono ze względu na zerwany link –

+0

Zmieniam link, kliknij ponownie i usuń głosowanie: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –

+0

dzięki Abdennour –

0

uruchom następujące polecenie cmd:

npm install xmimetype ; 

Następnie w kodzie:

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 

Aby uzyskać więcej informacji, sprawdź GIT repository.


Przeciwieństwem jest dostępny:

xm.extensionsOf("image/jpeg"); 
// -> [ 'jpeg', 'jpg', 'jpe' ] 
Powiązane problemy