Node.js - 文件系统获取文件类型,解决方案大约在2012年

noo*_*oob 24 javascript filesystems file-type node.js

我需要在node.js的帮助下获取文件的文件类型来设置内容类型.我知道我可以轻松检查文件扩展名,但我也有没有扩展名的文件应该有内容类型image/png,text/htmlaso.

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

var http = require("http"),
    fs = require("fs");
http.createServer(function(req, res) {
    var data = "";
    try {
        /*
         * Do not use this code!
         * It's not async and it has a security issue.
         * The code style is also bad.
         */
        data = fs.readFileSync("/home/path/to/folder" + req.url);
        var type = "???"; // how to get the file type??
        res.writeHead(200, {"Content-Type": type});
    } catch(e) {
        data = "404 Not Found";
        res.writeHead(404, {"Content-Type": "text/plain"});
    }
    res.write(data);
    res.end();
}).listen(7000);
Run Code Online (Sandbox Code Playgroud)

我还没有在API中找到这个功能,所以如果有人能告诉我怎么做,我会很高兴.

250*_*50R 31

有一个帮助库,用于查找mime类型https://github.com/broofa/node-mime

var mime = require('mime');

mime.getType('/path/to/file.txt');         // => 'text/plain'
Run Code Online (Sandbox Code Playgroud)

但它仍然使用扩展名进行查找

  • 实际上,这个库非常好,但是由于ThiefMaster已经对timeoxly的答案进行了评论,它基于文件扩展名,所以它会在没有扩展名的情况下下载文件. (4认同)
  • 这对我不起作用,mime.lookup不是一个函数(可能已删除) (3认同)
  • 从版本2"查找"重命名为"getType".资料来源:https://www.npmjs.com/package/mime (3认同)

Thi*_*ter 18

看看mmmagic模块.这是一个libmagic绑定,似乎完全符合你的要求.

  • @Raynos:看到你不知道,你为什么评论?这是最好的答案. (10认同)
  • 假设`fs.stat`执行`stat`的操作:你到那里的任何信息到底能帮助他确定文件的MIME类型? (4认同)
  • 我实际上并不知道,我认为它会告诉你一些有用的东西:P (2认同)
  • 尝试将路径传递给魔术文件作为[`new Magic()`]的第一个参数(https://github.com/mscdex/mmmagic#magic-methods) (2认同)

Dan*_*lig 9

您应该看一下命令行工具file(Linux).它试图根据文件的前几个字节猜测文件类型.您可以使用child_process.spawn它从节点内运行它.


tim*_*ley 6

你想要查找mime类型,谢天谢地,node只为此提供了一个方便的库:

https://github.com/bentomas/node-mime#readme

编辑:

您应该查看静态资产服务器,而不是自己设置任何这些内容.您可以使用express来轻松地执行此操作,或者有一大堆静态文件模块,例如欣喜若狂.另一方面,你应该使用nginx来提供静态文件.

  • 根据他想要做什么,根据文件名获取类型可能不是最好的主意. (7认同)