我知道Express有res.contentType()方法,但是如何根据路径/文件(包括静态内容)自动设置内容类型?
答案 0 :(得分:34)
另外,如果你想扩展表达(连接)知道的mime类型,你可以做到
express.static.mime.define({'text/plain': ['md']});
或
connect.static.mime.define({'text/plain': ['md']});
PS:mime模块现在位于https://github.com/broofa/node-mime
答案 1 :(得分:16)
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);
答案 2 :(得分:8)
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 : ''));
}
如果这不适合您,请发布您的代码,因为您的自定义代码可能会以某种方式干扰默认行为。
答案 3 :(得分:4)
Express使用Connect,Connect使用Mime,Mime包含文件 mime.types (使用Apache的默认mime类型)和 节点。类型 (节点社区提供的其他类型)。您可以在node_modules中的mime副本中自定义其中一个文件以添加所需的内容类型,或者Mime还有一个API,允许您指定要从代码中加载的其他内容类型或.types文件。
答案 4 :(得分: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}
});
});
然后,如果您有示例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]
答案 5 :(得分: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' ]