Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

Вывод blob-файла в браузер

#php

                    
Как вывести изображение blob из БД в браузер? Headers нельзя передать,поскольку до
этого уже естественно была передана html-разметка. Додумался так : 



handler.php отправит нужные  заголовки. Но как передать этому файлу саму картинку
$data['image']. ??? Возможно эта реализация изначально неправильная. 
Кто-нибудь что-нибудь подскажет по этому поводу?
update, @klopp, по-поводу если будет несколько картинок - в этой же таблице есть
поле с html-кодом всей новости, там и img, и  все остальное, а вопрос был по поводу
едпинственной картинки, которая должна быть превьюшкой в  каждой новости.    


Ответы

Ответ 1



Заранее скажу, что не считаю хорошей идеей хранить данные в blob в mysql. Однако, отвечаю именно на Ваш вопрос. Можно сделать с помощью nginx так, чтобы можно было обращаться к файлу как /img/filename.ext. Локейшн в nginx #переадресует обращения, например, с /img/land.png на handler.php?name=land.png location ~* ^/img/(.*)$ { try_files $uri /handler.php?name=$1; } Допустим, есть таблица, где храниться имя файла, тип контента, и сам контент в blob_data +----+--------------+----------+-----------+ | id | content_type | name | blob_data | +----+--------------+----------+-----------+ | 1 | image/png | land.png | 21K | | 2 | image/png | sky.png | 21K | +----+--------------+----------+-----------+ файл handler.php if (!isset($_GET['name'])) notFound(); $conn = new PDO("mysql:host=mysql;dbname=test;", 'admin', 'admin'); $q = $conn->prepare('SELECT content_type, blob_data FROM test WHERE name=? LIMIT 1'); $q->execute([$_GET['name']]); $q->bindColumn(1, $content_type, PDO::PARAM_STR, 256); $q->bindColumn(2, $blob_data, PDO::PARAM_LOB); $q->fetch(PDO::FETCH_BOUND); if (empty($content_type)) notFound(); header("Content-Type: $content_type"); echo $blob_data;

Комментариев нет:

Отправить комментарий