web-dev-qa-db-ja.com

Node.js-ファイルシステムがファイルタイプを取得、2012年頃のソリューション

コンテンツタイプを設定するには、node.jsを使用してファイルのファイルタイプを取得する必要があります。ファイル拡張子を簡単に確認できることは知っていますが、コンテンツタイプimage/pngtext/html asoを持つ必要のある拡張子のないファイルもあります。

これは私のコードです(あまり意味をなさないことはわかっていますが、それが必要なベースです)。

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);

[〜#〜] api [〜#〜] にはそのための関数が見つかりませんでした。

23
noob

mmmagic module をご覧ください。これはlibmagicバインディングであり、まさにあなたが望むことをするようです。

18
ThiefMaster

MIMEタイプを検索するためのヘルパーライブラリがあります https://github.com/broofa/node-mime

var mime = require('mime');

mime.getType('/path/to/file.txt');         // => 'text/plain'

しかし、それでもルックアップには拡張子を使用します

31
250R

コマンドラインツールfile(Linux)をご覧ください。ファイルの最初の数バイトに基づいてファイルタイプを推測しようとします。 child_process.spawnを使用して、ノード内から実行できます。

9
Daniel Baulig

2018年のソリューション

受け入れられた回答はPython依存関係を持ち、他の回答は古くなっているか、ファイル名に何らかの拡張子があると仮定しています。

私の最新の答えを見つけてください here

3
Stephen Paul

私はこれを使用しました:

npm install mime-types

そして、コード内:

var mime = require('mime-types');
tmpImg.contentType = mime.lookup(fileImageTmp);

FileImageTmpは、ファイルシステム(この場合はtmp)に格納されているイメージのコピーです。

私が見ることができる結果は:image/jpeg

1
Andrea Girardi