2016-09-13 7 views
0

вот мой код для отображения изображения, хранящегося на странице GridFS на HTML.Есть ли способ отображения изображений из GridFS, а не кодировки base64 в теге html image

$conn = new MongoClient('SHLY_DBSERVER'); 
    $db = $conn->newdb; 
    $gridFS = $db->getGridFS('productImages'); 

     $image = $gridFS->find(); 
     $im_array=iterator_to_array($image); 


     return $im_array; 

пропусканием $ im_array к виду ..

  foreach ($im_array as $key => $value) 
      { 
      $imageFile = $value->getBytes(); 

      $img=base64_encode($imageFile); ?> 
    <img style="width:300px;margin-left: 5em" class="img-responsive" src="data:image/jpg;charset=utf8;base64,<?php echo $img ?>"/><br> 


    } 

это хорошая практика для отображения изображений обычного веб-страницы? Должен ли я пойти на хранение файловой системы?

+0

Направьте свой тег изображения на php-скрипт (используя src) и передайте тот файл, который вы хотите, через $ _GET. Этот скрипт php считывает данные изображения из сетки FS, выводит правильный заголовок и отправляет необработанные двоичные данные для изображения. Результат - это больше веб-запросов, но без увеличения размера кодированных данных base64. Вы также можете настроить скрипт php на соответствующие заголовки для кэширования. –

+0

Можете ли вы показать мне какой-то код для понимания? –

+0

http://stackoverflow.com/questions/7793009/how-to-retrieve-images-from-mysql-database-and-display-in-an-html-tag, который показывает, как это сделать с помощью mysql, просто замените выбор из mysql db для извлечения из gridfs. Это по сути то же самое. –

ответ

0

Для изображений, js, css и файлов вложений вы должны хранить файлы в файловой системе только потому, что ваш веб-сервер управляет кешированием на стороне клиента и на стороне сервера.