3

以下を使用して GRIDFS にファイルを正常に追加しました。

 $asset = new Asset();
   $asset->setName('Image'.$count);
   $asset->setFile($uploadedFile->getPathname());
   $dm->persist($asset);
   $dm->flush();

次に、次を使用してファイルを印刷してみます。

$dm = $this->get('doctrine.odm.mongodb.document_manager');
         $image = $dm->createQueryBuilder('MyBundle:Asset')
                     ->field('id')->equals($imageID)
                     ->getQuery()
                     ->getSingleResult();
                 header('Content-type: image/png;');
                  echo $image->getFile()->getBytes();

しかし、何も表示されません。私もです:

var_dump($image);

そして、次を取得します。

object(Main\MyBundle\Document\Asset)#429 (7) {
  ["id":protected]=>
  string(24) "50330286c7e24c7019000004"
  ["name":protected]=>
  string(6) "Image2"
  ["file":protected]=>
  object(Doctrine\MongoDB\GridFSFile)#427 (4) {
    ["mongoGridFSFile":"Doctrine\MongoDB\GridFSFile":private]=>
    object(MongoGridFSFile)#430 (3) {
      ["file"]=>
      array(7) {
        ["_id"]=>
        object(MongoId)#431 (1) {
          ["$id"]=>
          string(24) "50330286c7e24c7019000004"
        }
        ["name"]=>
        string(6) "Image2"
        ["filename"]=>
        string(14) "/tmp/phpQ1LCIC"
        ["uploadDate"]=>
        object(MongoDate)#432 (2) {
          ["sec"]=>
          int(1345520262)
          ["usec"]=>
          int(510000)
        }
        ["length"]=>
        float(194992)
        ["chunkSize"]=>
        float(262144)
        ["md5"]=>
        string(32) "5bbc9ede74f50f93a3f7d1f7babe3170"
      }
      ["gridfs":protected]=>
      object(MongoGridFS)#437 (5) {
        ["w"]=>
        int(1)
        ["wtimeout"]=>
        int(10000)
        ["chunks"]=>
        object(MongoCollection)#438 (2) {
          ["w"]=>
          int(1)
          ["wtimeout"]=>
          int(10000)
        }
        ["filesName":protected]=>
        string(12) "assets.files"
        ["chunksName":protected]=>
        string(13) "assets.chunks"
      }
      ["flags"]=>
      int(0)
    }
    ["filename":"Doctrine\MongoDB\GridFSFile":private]=>
    NULL
    ["bytes":"Doctrine\MongoDB\GridFSFile":private]=>
    NULL
    ["isDirty":"Doctrine\MongoDB\GridFSFile":private]=>
    bool(false)
  }
  ["uploadDate":protected]=>
  string(21) "0.51000000 1345520262"
  ["length":protected]=>
  string(6) "194992"
  ["chunkSize":protected]=>
  string(6) "262144"
  ["md5":protected]=>
  string(32) "5bbc9ede74f50f93a3f7d1f7babe3170"
}

ファイル名とバイトが NULL なのはなぜですか?

4

1 に答える 1

3

GridFSFileソースを見ると、$bytesファイルの内容を上書きする場合にのみ使用されていることがわかります。プロパティはゲッター中に設定されることがありますが、$filenameそれ以外の場合はGridFSでファイル名を変更するときに使用されます。

出力の他の値に基づくとvar_dump()、GridFSに確かにファイルがあるように見えます(チャンクサイズ、バイト長、md5ハッシュなどがあります)。メソッドをデバッグし、内部のMongoGridFSFileインスタンスGridFSFile::getBytes()のメソッドに適切にチェーンされていることを確認することをお勧めします。または、 rawドライバークラスを直接getBytes()呼び出して操作することもできます。GridFSFile::getMongoGridFSFile()それはこれを教義またはドライバーの問題のいずれかに絞り込むでしょう。

偶然にも、どのバージョンのPECLドライバーを使用していますか?GridFSには過去にいくつかのバグがあり、最近のバージョンではいくつかの更新がありました(changelogを参照)。

于 2012-08-24T15:28:49.180 に答える