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