sql >> データベース >  >> NoSQL >> MongoDB

Node + Jade + Expressを使用してMongo(GridFS)に保存された画像をレンダリングする

    私はこれを理解しました(ティモシーに感謝します!)。問題は、これらすべてのテクノロジーとそれらがどのように組み合わされるかについての私の理解でした。 Node、Express、Jadeを使用してMongoDBGridFSからの画像を表示することに興味がある他の人のために...

    MongoDBのマイドキュメントには、文字列として保存されたObjectIdであるGridFSに保存された画像への参照があります。例えばMyEntity {ImageId: '4f6d39ab519b481eb4a5cf52'} <-NB:ObjectIdの文字列表現。これを文字列として保存した理由は、ObjectIdを保存すると、バイナリとしてレンダリングされるためルーティングに問題が発生し、これを修正する方法がわからなかったためです。 (たぶん誰かがここで助けることができますか?)とにかく、私が持っている解決策は以下のとおりです:

    FileRepository -GridFSから画像を取得し、文字列IDを渡し、それをBSON ObjectIdに変換します(ファイル名でファイルを取得することもできます):

    FileRepository.prototype.getFile = function(callback,id) {
       var gs = new GridStore(this.db,new ObjectID(id), 'r');
       gs.open(function(err,gs){
          gs.read(callback);
       });
     };
    

    翡翠テンプレート -HTMLマークアップをレンダリングします:

    img(src='/data/#{myentity.ImageId}')
    

    App.JSファイル -ルーティング(Expressを使用)動的画像の「/ data /:imgtag」ルートを設定しました:

    app.get('/data/:imgtag', function(req, res) {
      fileRepository.getFile( function(error,data) {
         res.writeHead('200', {'Content-Type': 'image/png'});
         res.end(data,'binary');
      }, req.params.imgtag );
    });
    

    そしてそれは仕事をしました。ご不明な点がございましたら、お気軽にお問い合わせください:)



    1. 使用可能なすべてのキーを取得するためのRedisコマンド?

    2. オブジェクトのエンコード中にMongoDBBSONコーデックが使用されていません

    3. 整数値でのMongoDB正規表現検索

    4. データ集約型アプリケーションでのJava+RedisとプレーンJavaの効率?