【发布时间】:2014-08-05 07:01:40
【问题描述】:
假设我有一个没有附加扩展名的文件,例如:images/cat_photo
Node.js 中是否有一种方法可以提取给定文件的 MIME 类型?在这种情况下模块mime 不起作用。
【问题讨论】:
标签: javascript node.js mime-types
假设我有一个没有附加扩展名的文件,例如:images/cat_photo
Node.js 中是否有一种方法可以提取给定文件的 MIME 类型?在这种情况下模块mime 不起作用。
【问题讨论】:
标签: javascript node.js mime-types
是的,有一个名为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 上的类型签名。
【讨论】:
另一种可能性是使用 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
您好。
【讨论】:
您可以简单地使用String.prototype.split(),然后获取数组的最后一个元素,这将是类型。
您可以使用 pop 方法取出数组中的最后一个元素:
const mimeType = fileName.split('.').pop()
或
const type = mimeType.split('/')
然后type[1] 将具有扩展名
【讨论】: