Недавно мы интегрировали Gridfs в mongodb для хранения изображений. По моему требованию, ранее мы использовали NFS для получения или хранения изображений в каталоге. его становится все более медленным для изображений. Итак, мы интегрировали GridFS.
GridFS, но теперь я поясню, как мы можем получить несколько изображений по одному запросу и показать их в браузере? Потому что мы заполнили около 1 л фотографий в шардинге mongodb gridfs. Но я не могу получить более одного изображения по одному запросу.
Пример кода приведен ниже. - Следующий код вернет только одну фотографию. Я не могу получить все изображения по одному запросу. Если кто-то сталкивается с такими проблемами, пожалуйста, поделитесь с нами.
Метод 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);