在Node.js中获取没有扩展名的文件的MIME类型

11

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

在Node.js中有没有提取给定文件MIME类型的方法? 在这种情况下,模块mime无法使用。

3个回答

12

是的,有一个叫做mmmagic的模块。它通过分析文件的内容来最大程度地猜测文件的MIME类型。

代码将会像这样(取自示例):

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 类型可能并不总是得出正确答案。

随意在维基页面上阅读类型标识。


他不需要下载任何包来完成这个任务,他可以使用原生JS来实现。 - gbrennon
23
请通过发布一篇回答来证明这一点。否则,您的评论将毫无用处。 - Tomáš Hübelbauer

5
另一种可能性是使用exec或execSync函数在Linux操作系统上运行'file'命令。
/**
 * 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上运行,请查看这个Superuser问题: https://superuser.com/questions/272338/what-is-the-equivalent-to-the-linux-file-command-for-windows 问候。

-8
你可以简单地使用 String.prototype.split(),然后取数组的最后一个元素,它将是类型。
您可以使用 pop 方法获取数组中的最后一个元素:
const mimeType = fileName.split('.').pop()

或者

const type = mimeType.split('/')

那么type [1]将具有扩展名


9
楼主表示该文件没有扩展名。此外,该文件的扩展名并不是一种 MIME 类型... - FZs
那么alandarev的答案将是最佳选择,但我不确定接受未知文件是否是最佳实践。 - Markus Azer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接