5

Mongodb は 2 つの方法で画像を保存できることを理解しています。

  1. 画像をバイナリとして保存することにより、通常のドキュメントに
  2. より大きな画像を管理するための Gridfs 経由。

簡単にするために、またサーバーに入れる予定のイメージが小さいため、オプション 1 を使用します。

画像をブラウザーに提供するために、nodejs を使用しています。

私の質問は、これがどれほど難しいかということです。バイナリ データをブラウザが理解できる実際の画像に変換するにはどうすればよいでしょうか。どのタイプのエンコーディングが関係していますか?

Web 上の他の場所にあるチュートリアルや例を教えてもらえますか?

ところで、これはパフォーマンス上の理由から良い考えではないかもしれないことはわかっていますが、一度提供された画像をキャッシュする予定です。ファイルシステムをまとめて避けたいだけです。

4

2 に答える 2

7

MongoDBから画像を提供しないことを強くお勧めします。

それらを静的ファイルストア(S3)に保存し、パスをMongoDBに保持することをお勧めします。


おそらくbase64エンコーディングを使用してファイルをmongodbに配置します:http ://www.greywyvern.com/code/php/binary2base64/ (または単にbase64シェルユーティリティ)。

通常のドキュメントのみを使用している場合、パフォーマンスコストは比較的低くなります(キャッシュが適切である限り)。GridFSと通常のドキュメントがある混合データベースを使用している場合は、サーバーに大量のRAMが必要になります。GridFSクエリは、ドキュメントクエリとはまったく異なる方法で実行されます。

画像の変換は次のように機能します。

var base64Data = imagefile.replace(/^data:image\/png;base64,/,""),
var dataBuffer = new Buffer(base64Data, 'base64');

// below line won't actually work but it's something along the lines of what you want:

db.foo.insert({magic: 123, etc... img: dataBuffer.toString()})
于 2012-07-19T20:59:10.713 に答える