0

私はGridFSを使用しており、現在、findOneを使用して単一の画像を表示するようにしていますが、グリッド内のすべての結果を反復処理してすべてを画面にエコーしたいのですが、使用しているコードは次のとおりです。

<?php
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->findOne(array('_id' => new MongoId('4fb437dbee3c471b1f000001')));

  // 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

3 に答える 3

0

一般に、Webページに画像を表示する場合は、のようなタグをたくさん用意<img src="someUrl" />してから、各someUrlハンドルで1つの画像を取得する必要があります。

于 2012-05-17T15:54:22.097 に答える
0

ヘッダーを image/png に設定して、ブラウザーが 1 つの画像のみを想定するようにします。

これを text/html ドキュメントに変更し、データ URI スキーム ( http://en.wikipedia.org/wiki/Data_URI_schemeを参照) を使用して画像を埋め込み、一連の画像タグで画像を出力することができます。

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>My images</title>
    <head>
    <body>
    <?php
    /* ... db connection/init code ... */

    $files = $grid->find({});

    foreach($files as $file) { 
       $encodedData = base64_encode($file->getBytes());
       echo "<img src=\"data:image/png;base64,{$encodedData}\">";
       echo "<br>";
    }
    ?>
    </body>
</html>

おそらく、画像の MIME タイプを検出してそれに応じて変更し、ファイルのメタデータを使用して alt、width、および height 属性を設定する必要があることに注意してください。

お役に立てれば。

于 2012-06-18T22:21:04.827 に答える
0

「find」と「findOne」を使用すると、次のように foreach でループできる結果セットが返されます。

$files = $grid->find({});

foreach($files as $file) { echo $file->someData; }

于 2012-05-17T15:48:09.450 に答える