似乎node.js的所有流行的MIME类型库只使用文件扩展名而不是窥视文件来确定MIME类型。
是否有一种很好的方法可以使用Node跳转到文件中并在没有扩展名的情况下智能地确定文件的MIME类型?
答案 0 :(得分:7)
确实感觉很遗憾,最受欢迎的 MIME 模块只是将扩展名映射到该类型。
在深入搜索之后,我找到了名为mmmagic的模块,它似乎完全符合您的要求。
请注意,通过使用 MIME ,我有一种品味, MIME 检测原则上并不完全可靠,并且很有可能出现错误检测
使用示例(取自their网站):
var mmm = require('mmmagic'),
Magic = mmm.Magic;
var magic = new Magic(mmm.MAGIC_MIME_TYPE);
magic.detectFile('node_modules/mmmagic/build/Release/magic.node', function(err, result) {
if (err) throw err;
console.log(result);
// output on Windows with 32-bit node:
// application/x-dosexec
});
答案 1 :(得分:3)
由于MIME根本不会规定文件内容格式,因此您只能使用启发式方法来猜测文件中发生了什么:
某些二进制格式有一个叫做幻数的东西,但那些可能是错误的或含糊不清的。 See this wikipedia article了解更多信息。
许多文本文件格式都包含可用于简单模式匹配测试的语法结构。例如。 xml
,csv
或json
。然而,某些格式(例如HTML
)有一个相当"进化的"语法定义使其模糊不清,因而很难进行模式匹配。
为了更好地说明歧义问题,这里有一个例子:浏览器已经开发出非常高的容差,并且接受任何远离HTML
的{{1}}因此HTML
(甚至XHTML
})文件格式很难识别。更不用说HTML
文件实际上可能是非HTML
模板语言(例如jade
,handlebars
,angular
模板等... 。这只是事情变得非常模糊的许多例子中的一个。