1

最近、画像を保存するために mongodb に Gridfs を統合しました。私の要件では、以前はディレクトリにイメージを取得または保存するために NFS を使用していました。画像の速度が遅くなります。そこで、GridFS を統合しました。

GridFS. mongodb gridfs シャーディングで 1L 近くの写真を取り込んだためです。しかし、1回のリクエストで複数の画像を取得することはできません。

以下のサンプルコード。- 次のコードは、写真を 1 つだけ返します。1回のリクエストですべての画像を取得できません。誰かがこの種の問題に直面している場合は、pls は私たちを共有します。

方法 1:画像を 1 つだけ返します。

$mongo = new Mongo("192.168.0.8:27017");
$db = $mongo->myfiles;
$gridFS = $db->getGridFS();
$cursor = $gridFS->find()->limit(10); - it will return one than one images
/*$cursor  = $gridFS->find(array("metadata.memberid"=>"CMD34123")); - it will return one than one images, because the member having more than one images.*/

foreach ($cursor as $obj)
{                   
        header("Content-Type: image/jpg");
        $stream = $obj->getResource();

        while (!feof($stream)) {
                echo fread($stream, 51200);
        }
}

方法 2:すべてのイメージを返しますが、NFS と同じように各イメージが各 HTTP リクエストを取得します。保存なし。

$mongo = new Mongo("192.168.0.8:27017");
$db = $mongo->myfiles;
$gridFS = $db->getGridFS();
$cursor = $gridFS->find()->limit(10);
foreach ($cursor as $obj)
       echo "<img src='getphoto.php?filename=".$obj->getFilename()."'>";

getphoto.php:

$mongo = new Mongo("192.168.0.8:27017");
$db = $mongo->myfiles;
$gridFS = $db->getGridFS();
/*$image = $gridFS->findOne($_REQUEST['filename']);*/
header("Content-Type: image/jpg");
echo $stream = $image->getResource();
while (!feof($stream)) 
        echo fread($stream, 51200);
4

1 に答える 1