1

Mongo DB GridFS にいくつかの画像を保存しました。現在、画像を表示しようとしていますが、深刻な課題に直面しています。私が見る<Mongo Binary Data>のはアウトプットだけです。ヘッダーの設定をいじってみましたが、うまく機能していないようです。私が見るのはすべてです<Mongo Binary Data>。画像ヘッダー (jpeg/png など) を送信しようとしましたが、画像が空になります。なんで ?

画像を表示するコードは次のとおりです。

public function someAction($imageID)
    {
   $dm = $this->get('doctrine.odm.mongodb.document_manager');

         $image = $dm->createQueryBuilder('Mybundle:Asset')
                     ->field('id')->equals($imageID)
                     ->getQuery()
                     ->getSingleResult();

  return new Response($image->getFile()->getBytes(), 200, array('Content-Type' => 'image/jpeg'));

}

コンテンツ タイプをテキストに変更しようとすると、<Mongo Binary Data>再び表示されます。

これが私のルーティングファイルです:

my_route:
    pattern:  /showimage/{imageID}
    defaults: { _controller: MyBundle:someController:someAction}
    requirements:
        _method:  GET
4

1 に答える 1

0

"<Mongo Binary Data>"MongoBinData::__toString()から返される文字列です。この動作は何年も前にさかのぼりますが、MongoBinData が文字列にキャストされた場合に、誤って大きな出力が生成されたり、印刷できない文字がエコーされたりするのを避けるために実装されたと思います。

あなたの場合、オブジェクト$image->getFile()に対応すると思いDoctrine\MongoDB\GridFSFileます。getBytes()オブジェクトの内部$bytesプロパティ、ファイルの内容、またはMongoGridFSFile::getBytes()へのチェーンを返すかどうかを確認するために、そこでデバッグを開始します。

さらに、Asset クラスのモデル/マッピング情報を共有すると、同じクエリによって返されるハイドレートされていないデータと同様に役立つ場合があります。クエリ ビルダー チェーンに追加->hydrate(false)すると、後者が実現されます。

于 2014-01-15T01:08:51.037 に答える