【问题标题】:Use File Content to Determine MIME Type with Node JS通过 Node JS 使用文件内容来确定 MIME 类型
【发布时间】:2014-08-31 00:38:19
【问题描述】:

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

有没有什么好的方法可以使用 Node 跳转到文件中,并在不存在扩展名的情况下智能地确定文件的 MIME 类型?

【问题讨论】:

    标签: javascript node.js file mime-types


    【解决方案1】:

    这确实有点遗憾,最流行的 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
      });
    

    【讨论】:

    • Multer, Formidable, mime-types, file-type 返回文件类型取决于扩展名。使用同一个文件,当我更改扩展名时,我会得到另一种 mime 类型。只有 mmmagic 真正有效!
    【解决方案2】:

    由于 MIME 根本没有规定任何关于文件内容格式的内容,因此您只能使用启发式方法来猜测文件中发生了什么:

    1. 一些二进制格式有一个叫做幻​​数的东西,但它们可能是错误的或模棱两可的。 See this wikipedia article 了解更多信息。

    2. 许多文本文件格式都包含可用于简单模式匹配测试的语法结构。例如。 xmlcsvjson。然而,某些格式(例如HTML)具有相当“进化”的语法定义,使其模棱两可,因此难以进行模式匹配。

    为了更好地说明歧义的问题,这里有一个例子:浏览器已经开发出非常高的容忍度,并且接受任何与HTML 很相似的东西,因此HTML(甚至XHTML)文件格式很难来识别。更不用说HTML 文件实际上可能是非HTML 模板语言(例如jadehandlebarsangular 模板等)。这只是事情变得非常模棱两可的众多示例之一。

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 2021-04-13
      • 2011-01-28
      • 2013-07-15
      • 1970-01-01
      • 2012-09-04
      • 2011-08-27
      • 2013-04-21
      • 2022-01-22
      相关资源
      最近更新 更多