我知道Express有res.contentType()方法,但是如何根據路徑/文件(包括靜態內容)自動設置內容類型?Express:根據路徑/文件設置內容類型?
回答
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 : ''));
}
如果這不是爲你工作,發佈您的代碼作爲您的自定義代碼很可能與默認行爲干擾莫名其妙。
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);
謝謝,但是這就是我想要的東西,以避免......只是希望它基於路徑或文件名是自動的。 – mahemoff
我不知道我明白。你能發表一個小例子嗎? –
我用一個例子更新了我的答案。我仍然誤解你在找什麼? –
Express使用連接,連接使用MIME和啞劇包括文件的mime.types(與Apache的默認MIME類型)和node.types(有一些其他類型的貢獻的節點社區) 。您可以在node_modules中的mime副本中自定義其中一個文件以添加所需的內容類型,或者Mime還具有一個API,可讓您指定從代碼加載的其他內容類型或.types文件。
通過require(「mime」)添加MIME定義。define(...)不起作用。可能是因爲快遞捆綁它是自己的MIME模塊?我如何訪問捆綁的MIME模塊? – panzi
另外,如果你想擴展MIME類型表達(連接)知道,你可以做
express.static.mime.define({'text/plain': ['md']});
或
connect.static.mime.define({'text/plain': ['md']});
PS:在MIME模塊現在位於https://github.com/broofa/node-mime
下載此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]
downvoted因爲斷開鏈接 –
我改變了鏈接,再次點擊並刪除投票:https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types –
謝謝Abdennour –
運行以下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' ]
- 1. 根據類型設置xml文件名
- 2. ASP.NET MVC根據文件/文件路徑確定MIME類型
- 3. 設置類路徑文件夾
- 4. 設置JAR文件的類路徑
- 5. 如何根據文件類型設置Emacs標籤設置?
- 6. QTCreator .pro文件:根據DEBUG/RELEASE設置LIBS路徑
- 7. 根據特定路徑上的文件夾設置變量
- 8. 設置類路徑
- 9. 根據url/nginx設置內容處置
- 10. 在Express路徑中獲取文件類型
- 11. Web APi Void,IIS express內容類型,IIS沒有內容類型
- 12. 在Rails中設置公共文件類型的內容處置?
- 13. 如何根據C#中的文件類型查找.cs文件的路徑#
- 14. 根據亞馬遜的內容類型列出文件s3
- 15. 是否可以根據文件內容創建結構類型?
- 16. 如何根據內容確定文件的類型?
- 17. 根據文件的內容在systemd中設置env變量
- 18. 如何根據文件內容設置Atom語法?
- 19. 如何根據文件內容爲鏈中的ExePackage設置InstallCondition?
- 20. 設置xml文件的文件路徑
- 21. 設置文件路徑「文件」
- 22. 根據標題類型顯示內容
- 23. 根據內容類型返回xml/json
- 24. Angularjs頁面內容根據路由器設置
- 25. 根據內容設置div寬度
- 26. 根據區域設置選擇內容
- 27. 根據內容將ComBox設置爲ComboBoxItem
- 28. 根據屬性文件中的類路徑加載Java類
- 29. 如何根據路徑獲取用戶控件的類型
- 30. C#內容文件夾路徑
'mime.lookup()'現在重命名爲'mime.getType()'。 – Pei