27

node.jsを使用してファイルのファイルタイプを取得し、コンテンツタイプを設定する必要があります。ファイル拡張子を簡単に確認できることはわかっていますが、拡張子のないファイルもあり、コンテンツタイプimage/pngtext/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);

APIでそのための関数を見つけられなかったので、誰かがそれを行う方法を教えてくれたら嬉しいです。

4

7 に答える 7

39

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

var mime = require('mime');

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

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

于 2012-05-03T13:05:06.947 に答える
20

mmmagicモジュールを見てください。これはlibmagicバインディングであり、あなたが望むことを正確に実行しているようです。

于 2012-05-03T13:06:20.723 に答える
9

fileコマンドラインツール(Linux)を確認する必要があります。ファイルの最初の数バイトに基づいてファイルタイプを推測しようとします。child_process.spawnノード内から実行するために使用できます。

于 2012-05-03T12:58:53.870 に答える
6

mimeタイプを検索したいのですが、ありがたいことに、ノードにはそのための便利なライブラリがあります。

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

編集:

おそらく静的アセットサーバーを調べて、このようなものを自分で設定するべきではありません。expressを使用してこれを非常に簡単に行うことができます。または、 ecstaticなどの静的ファイルモジュールのホスト全体があります。一方、静的ファイルを提供するには、おそらくnginxを使用する必要があります。

于 2012-05-03T13:02:43.970 に答える
3

2018ソリューション

受け入れられた回答にはPythonの依存関係があるようで、他の回答は古くなっているか、ファイル名に何らかの拡張子が付いていると推測されます。

私のより最新の答えをここで見つけてください

于 2018-12-06T11:34:08.620 に答える
2

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

npm install mime-types

そして、コード内:

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

ここで、fileImageTmpは、ファイルシステム(この場合はtmp)に保存されている画像のコピーです。

私が見ることができる結果は次のとおりです:image / jpeg

于 2018-03-30T08:12:14.317 に答える
0

私が信じる最善のアプローチfileは、システムのコマンドを使用することです。そうすれば、次の3つの利点があります。

  1. 依存関係なし、
  2. マジックナンバーを使用して、ファイルに含まれるコンテンツの種類を確認します。
  3. 魔法のファイルを使ってコンテンツの種類を作成できるようになります。

例:

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

ドキュメント: https ://www.man7.org/linux/man-pages/man1/file.1.html https://nodejs.org/docs/latest-v13.x/api/child_process.html#child_process_child_process_exec_command_options_callback

于 2021-04-14T12:36:37.127 に答える