2011-08-18 101 views

回答

6

Connect會自動設置內容類型,除非您自己明確設置它。這是它的代碼片段。它採用mime.lookup和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 : '')); 
} 

如果這不是爲你工作,發佈您的代碼作爲您的自定義代碼很可能與默認行爲干擾莫名其妙。

+0

'mime.lookup()'現在重命名爲'mime.getType()'。 – Pei

8

Express documentation表明如果您傳遞文件名,它可以做到這一點。

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

[編輯]

下面是從所謂static相對目錄提供文件服務的例子,並自動設置基於文件的內容類型提供:

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

謝謝,但是這就是我想要的東西,以避免......只是希望它基於路徑或文件名是自動的。 – mahemoff

+0

我不知道我明白。你能發表一個小例子嗎? –

+0

我用一個例子更新了我的答案。我仍然誤解你在找什麼? –

2

Express使用連接,連接使用MIME和啞劇包括文件的mime.types(與Apache的默認MIME類型)和node.types(有一些其他類型的貢獻的節點社區) 。您可以在node_modules中的mime副本中自定義其中一個文件以添加所需的內容類型,或者Mime還具有一個API,可讓您指定從代碼加載的其他內容類型或.types文件。

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

+0

通過require(「mime」)添加MIME定義。define(...)不起作用。可能是因爲快遞捆綁它是自己的MIME模塊?我如何訪問捆綁的MIME模塊? – panzi

24

另外,如果你想擴展MIME類型表達(連接)知道,你可以做

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

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

PS:在MIME模塊現在位於https://github.com/broofa/node-mime

0

下載此database(或Another link):的mime.types:,然後

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


}); 

然後,如果你有FO例如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因爲斷開鏈接 –

+0

我改變了鏈接,再次點擊並刪除投票:https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –

+0

謝謝Abdennour –

0

運行以下CMD:

npm install xmimetype ; 

然後,在您的代碼中:

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 

欲瞭解更多信息,請檢查GIT repository


相對的是可供選擇:

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