最近、画像を保存するために 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);