1

私は現在2つのファイルを使用しています.1つはコンテンツを取得し、2つ目はそれを表示します(または試行します)

私がする必要があるのは、gridFS に保存されている画像を反復処理してそれらをすべて表示することです。ファイル名を反復処理することができ、ファイル名は検索のパラメーター内にありますが、機能しません。壊れた画像が表示されるだけです。 、コードは次のとおりです。

display.php

 <?php
   // open connection to MongoDB server
  $conn = new Mongo;

  // access database
  $db = $conn->database;

  // get GridFS files collection
  $grid = $db->getGridFS();

  $cursor = $grid->find(); 

    foreach ($cursor as $obj) {                   // iterate through the results
        $filename = $obj->getFilename().'<br/>';
    echo "<img src='newupload.php?filename=".$filename."'>";
    echo $filename;
    }


?>

これがgridFSに入るものです

<?php
  $filename = $_GET['filename'];
try {
  // open connection to MongoDB server
  $conn = new Mongo;

  // access database
  $db = $conn->database;

  // get GridFS files collection
  $grid = $db->getGridFS();

  // retrieve file from collection
  header('Content-type: image/png');
  $file = $grid->find(array('filename' => $filename ));

  // send headers and file data

  echo $file->getBytes();
  exit;  

  // disconnect from server
  $conn->close();
} catch (MongoConnectionException $e) {
  die('Error connecting to MongoDB server');
} catch (MongoException $e) {
  die('Error: ' . $e->getMessage());
}
?>

どうもありがとう

4

1 に答える 1

2

問題はfind()、オブジェクトのメソッドがMongoGridFSオブジェクトではなくカーソルを返すMongoGridFSFileことです。カーソルにはgetBytes()メソッドがありません。受信している実際の出力は、おそらくdie(...)catch 句内のメッセージの 1 つであり、ブラウザーは画像として表示できません。

の代わりにfind(array('filename' => $filename))、おそらく を使用する必要がありますfindOne(array('filename' => $filename))

同じファイル名のファイルが複数ある場合は、目的のファイルを確実に見つけるために、下位レベルにドロップする必要がある場合があることに注意してください (どのファイルが必要かは、ニーズによって異なります。おそらく最初のファイルであり、おそらく最初のファイルである可能性があります)最新のものか、他の基準に基づいている可能性があります)。この状況では、GridFS コレクション (「fs.files」という名前) を手動でクエリし、返すファイルを見つけて、そのファイルを_idget()メソッドに渡すことができますMongoGridFS

于 2012-05-17T20:53:18.857 に答える