Как я могу загружать и отображать изображения непосредственно из поля BLOB-объектов mysql, используя php, не сохраняя их в виде файлов? - PullRequest
1 голос
/ 12 июня 2009

У меня есть изображения, хранящиеся в mysql как медиа-объекты, и я хотел бы загрузить (показать) их непосредственно из базы данных без необходимости сначала сохранять их как файлы.

Мне нужно загрузить несколько изображений в таблицу (превью), чтобы команда header не делала этого. вот что я делаю:

        $imagePath = 'files' . DS . 'recipe_' . $recipe['Recipe']['id'] . '.tmp';
        file_put_contents($imagePath ,$recipe['Recipe']['image']);
        echo $html->image(DS . $imagePath); 

Ответы [ 3 ]

4 голосов
/ 12 июня 2009

Вы создаете скрипт с именем getimage.php. Большие пальцы в таблице должны быть примерно такими:

<img src='<path>/getimage.php?id=<image_id>' />

scipt getimage.php выполняет поиск в базе данных, а затем выводит что-то вроде:

...
header('Content-Type: image/jpeg');
header('Content-Length: ' . strlen($recipe['Recipe']['image']) );
echo $recipe['Recipe']['image'];
...
0 голосов
/ 12 июня 2009

Я получил это работает ....

Вот что я положил в таблицу:

'<img src= "/recipes/download/" . $recipe['Recipe']['id']) . '"/>'

и это действие загрузки:

function download($id) {
    Configure::write('debug', 0);
    $file = $this->Recipe->findById($id);

    header('Content-type: image/png' );
    header('Content-length: ' . strlen($file['Recipe']['thumb'])); // some people reported problems with this line (see the comments), commenting out this line helped in those cases
    header('Content-Disposition: attachment; filename="'.$file['Recipe']['thumb'].'"');
    echo $file['Recipe']['thumb'];

    exit();
}
0 голосов
/ 12 июня 2009

Другой вариант - использовать перенаправление apache либо в httpd.conf, либо в файле .htaccess, который перенаправляет все запросы изображений ( .gif | .jpg | * .png | и т. Д.) ваш скрипт getImage.php. Затем getImage.php извлекает данные из базы данных, отправляет соответствующие заголовки и выводит двоичные данные.

Преимущество этого по сравнению с ответом Флавиуса Стефа состоит в том, что тогда у ваших тегов может быть обычный источник (/path/to/image.jpg), а не очевидная поисковая система. Это также очистило бы ваши журналы доступа apache одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...