【问题标题】:Get MIME type of a file without extension in Node.js在 Node.js 中获取不带扩展名的文件的 MIME 类型
【发布时间】:2014-08-05 07:01:40
【问题描述】:

假设我有一个没有附加扩展名的文件,例如:images/cat_photo

Node.js 中是否有一种方法可以提取给定文件的 MIME 类型?在这种情况下模块mime 不起作用。

【问题讨论】:

    标签: javascript node.js mime-types


    【解决方案1】:

    是的,有一个名为mmmagic 的模块。它会尽量通过分析文件的内容来猜测文件的 MIME。

    代码将如下所示(取自example):

    var mmm = require('mmmagic'),
    var magic = new mmm.Magic(mmm.MAGIC_MIME_TYPE);
    
    magic.detectFile('node_modules/mmmagic/build/Release/magic.node', function(err, result) {
        if (err) throw err;
        console.log(result);
    });
    

    但请记住,猜测 MIME 类型可能并不总能得出正确的答案。

    随时阅读wiki page 上的类型签名。

    【讨论】:

    • 他不需要下载包就可以做到这一点,他可以用vanilla JS做到这一点
    • @gbrennon 通过发布显示这一点的答案来证明这一点。否则您的评论没有用处。
    【解决方案2】:

    另一种可能性是使用 exec 或 execSync 函数在 Linux SO 上运行“文件”命令:

    /**
     * Get the file mime type from path. No extension required.
     * @param filePath Path to the file
     */
    function getMimeFromPath(filePath) {
        const execSync = require('child_process').execSync;
        const mimeType = execSync('file --mime-type -b "' + filePath + '"').toString();
        return mimeType.trim();
    }
    

    但这并不是更好的解决方案,因为它只适用于 Linux。要在 Windows 中运行它,请检查这个超级用户问题: https://superuser.com/questions/272338/what-is-the-equivalent-to-the-linux-file-command-for-windows

    您好。

    【讨论】:

      【解决方案3】:

      您可以简单地使用String.prototype.split(),然后获取数组的最后一个元素,这将是类型。

      您可以使用 pop 方法取出数组中的最后一个元素:

      const mimeType = fileName.split('.').pop()
      

      const type = mimeType.split('/')
      

      然后type[1] 将具有扩展名

      【讨论】:

      • OP 声明文件 没有 扩展名。此外,文件扩展名不是 MIME 类型...
      • 那么 alandarev 答案将是最佳选择,但我不确定接受未知文件的最佳做法
      猜你喜欢
      • 1970-01-01
      • 2010-11-05
      • 2014-06-14
      • 1970-01-01
      • 2015-06-13
      • 2011-05-27
      • 2013-09-11
      相关资源
      最近更新 更多