<Mongodb二进制数据>作为浏览器输出

I have stored some images in Mongo DB GridFS. I am now trying to display the image but am running into serious challenges. All I see is <Mongo Binary Data> as the out put. I have played around with setting headers but nothing seems to be working fine. All I see is <Mongo Binary Data>. I try sending an image header (jpeg/png etc) but the image comes out empty. Why ?

Here is my code that displays the image:

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

}

When I try changing the content type to text, I get <Mongo Binary Data> again.

Here is my routing file:

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

"<Mongo Binary Data>" is the string returned from MongoBinData::__toString(). This behavior goes back a number of years, but I assume it was implemented to avoid inadvertently generating large output or echoing non-printable characters if MongoBinData was ever cast to a string.

In your case, I assume $image->getFile() corresponds to a Doctrine\MongoDB\GridFSFile object. I would start debugging there to see if getBytes() is returning the internal $bytes property of the object, some file contents, or chaining to MongoGridFSFile::getBytes().

Additionally, sharing the model/mapping information for your Asset class could help, as well as the non-hydrated data returned by the same query. Adding ->hydrate(false) to the query builder chain would accomplish the latter.