Javascript Node.js-文件系统获取文件类型,2012年左右的解决方案

Javascript Node.js-文件系统获取文件类型,2012年左右的解决方案,javascript,node.js,filesystems,file-type,Javascript,Node.js,Filesystems,File Type,我需要在node.js的帮助下获取文件的文件类型来设置内容类型。我知道我可以很容易地检查文件扩展名,但我也有没有扩展名的文件,这些文件的内容类型应该是image/png,text/htmlaso 这是我的代码(我知道这没有多大意义,但这是我需要的基础): 我还没有在中找到这方面的函数,因此如果有人能告诉我如何操作,我将非常高兴。您应该看看命令行工具文件(Linux)。它尝试根据文件的前几个字节猜测文件类型。您可以使用child\u process.spawn在节点内运行它。您想查找mime类型,

我需要在node.js的帮助下获取文件的文件类型来设置内容类型。我知道我可以很容易地检查文件扩展名,但我也有没有扩展名的文件,这些文件的内容类型应该是
image/png
text/html
aso

这是我的代码(我知道这没有多大意义,但这是我需要的基础):


我还没有在中找到这方面的函数,因此如果有人能告诉我如何操作,我将非常高兴。

您应该看看命令行工具
文件(Linux)。它尝试根据文件的前几个字节猜测文件类型。您可以使用
child\u process.spawn
在节点内运行它。

您想查找mime类型,幸好节点有一个方便的库:

编辑:


您可能应该查看静态资产服务器,而不是自己设置这些内容。您可以使用来轻松地完成此操作,也可以使用大量静态文件模块,例如。另一方面,您可能应该使用nginx来提供静态文件。

有一个用于查找mime类型的帮助程序库

但是它仍然使用扩展进行查找,尽管查看一下。这是一个libmagic绑定,似乎完全符合您的要求。

我使用了以下方法:

npm install mime-types
在代码中:

var mime = require('mime-types');
tmpImg.contentType = mime.lookup(fileImageTmp);
其中fileImageTmp是存储在文件系统上的映像的副本(在本例中为tmp)


我看到的结果是:图像/jpeg

2018解决方案

接受的答案似乎具有Python依赖性,而其他答案要么已过时,要么假定文件名具有某种扩展名


请找到我最新的答案

我认为最好的方法是使用系统的
文件
命令,这样您有三个优点:

  • 没有依赖关系
  • 您将通过幻数确保文件的内容类型
  • 您将能够通过魔术文件创建内容类型
  • 例如:

    let pathToFile = '/path/to/file';
    const child_process = require('child_process');
    child_process.exec(`"file" ${path}`, (err, res) => {
      let results = res.replace('\n', '').split(':');
      let stringPath = results[0].trim();
      let typeOfFile = results[1].trim();
      console.log(stringPath, typeOfFile);
    });
    
    文件:

    readFileSync
    是否在每次请求时都打开?听起来不是个好主意…@ThiefMaster说这只是一个伪代码(至少我认为“我知道这没有多大意义,但这是我需要的基础”应该是这个意思)。取决于他想做什么,根据文件名获取类型可能不是最好的主意。实际上,该库非常好,但正如ThiefMaster对timeoxly的答案所评论的,它基于文件扩展名,因此它将下载不带扩展名的文件。这对我不起作用,mime.lookup不是一个函数(可能已删除)从版本2开始,“查找”被重命名为“getType”。来源:假设
    fs.stat
    做了
    stat
    做的事情:你在那里得到的任何信息如何帮助他确定文件的MIME类型?我不知道,我想它会告诉你一些有用的信息:P@Raynos当前位置既然你不知道,为什么还要评论?这是迄今为止最好的答案。尝试将magic文件的路径作为任何方法的第一个参数来传递,以便从通过管道移动且文件系统中没有底层文件的文件中获取MIME?我看到这个API提供了一种从缓冲区获取它的方法,但这似乎相当繁琐,因为这似乎要求整个文件都存在,并且通常只需要检查文件的前几个字节。这是最好的答案,应该是答案。太糟糕了,这个六年前的问题被一个过时的答案所困扰。 @斯蒂芬,如果我问一个新问题,你愿意回答吗?当然可以:)我可以把这个答案和新的联系起来。给你。thx@Stephen.Cool,我已经回答了。
    var mime = require('mime-types');
    tmpImg.contentType = mime.lookup(fileImageTmp);
    
    let pathToFile = '/path/to/file';
    const child_process = require('child_process');
    child_process.exec(`"file" ${path}`, (err, res) => {
      let results = res.replace('\n', '').split(':');
      let stringPath = results[0].trim();
      let typeOfFile = results[1].trim();
      console.log(stringPath, typeOfFile);
    });