使用文件内容通过Node JS确定MIME类型

时间:2014-07-09 20:10:14

标签: javascript node.js file mime-types

似乎node.js的所有流行的MIME类型库只使用文件扩展名而不是窥视文件来确定MIME类型。

是否有一种很好的方法可以使用Node跳转到文件中并在没有扩展名的情况下智能地确定文件的MIME类型?

2 个答案:

答案 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根本不会规定文件内容格式,因此您只能使用启发式方法来猜测文件中发生了什么:

  1. 某些二进制格式有一个叫做幻​​数的东西,但那些可能是错误的或含糊不清的。 See this wikipedia article了解更多信息。

  2. 许多文本文件格式都包含可用于简单模式匹配测试的语法结构。例如。 xmlcsvjson。然而,某些格式(例如HTML)有一个相当"进化的"语法定义使其模糊不清,因而很难进行模式匹配。

  3. 为了更好地说明歧义问题,这里有一个例子:浏览器已经开发出非常高的容差,并且接受任何远离HTML的{​​{1}}因此HTML(甚至XHTML })文件格式很难识别。更不用说HTML文件实际上可能是非HTML模板语言(例如jadehandlebarsangular模板等... 。这只是事情变得非常模糊的许多例子中的一个。