показать изображение из blob mysql - PullRequest
1 голос
/ 25 мая 2009

Привет! У меня есть таблица изображений в моей базе данных. Они хранятся в виде больших двоичных объектов вместе с такими сведениями, как тип и имя изображения.

У меня проблема с отображением изображения, все, что я получаю, это белая коробка с красным крестом в нем. код:

<?php

include '../connection.php';

$ID = $_GET['id'];

$query = "SELECT * FROM `images` WHERE `image_id` = '$ID'";

$result=mysql_query($query);
$row = mysql_fetch_array($result);

$image = $row['image'];
$image_type= $row['image_type'];   

header("Content-type: $image_type");
print $image; 

exit;

?>

Спасибо

Ответы [ 7 ]

3 голосов
/ 25 мая 2009

Ну вот короткий ответ.

<?php
include '../connection.php';
$id = (int)$_GET['id'];
$query = "SELECT * FROM `images` WHERE `image_id` = '$id'";

$result=mysql_query($query);
$row = mysql_fetch_array($result);

$image = $row['image'];
$image_type= $row['image_type'];
$size = $row['image_size'];
//alternative
/* list($image, $image_type, $size) = array(
                                       $row['image'],
                                       $row['image_type'],
                                       $row['image_size']
                                      );
*/
$ext = explode('/', $image_type);
$name = $id . '.' . $ext[1]; 

header("Content-type: $image_type");
header("Content-length: $size");
header("Content-Disposition: attachment; filename=$name");

print $image;     
exit;

Убедитесь, что ваш тип BLOB-объекта является наименьшим MEDIUMBLOB, который может хранить данные размером до 16M

1 голос
/ 25 мая 2009

Для отладки я бы предложил закомментировать строку заголовка Content-type, а затем нажать на ссылку непосредственно в браузере. Это позволит вам увидеть любые ошибки, предупреждения или уведомления, которые может генерировать PHP.

0 голосов
/ 03 июня 2014

Или, если вы не хотите создавать отдельный php-файл, вы можете встроить его

<?php
// retrieve blob into $img
?><img src='data:image/png;base64,<?php echo base64_encode( $img );?>' alt='Image <?php echo $id;?>'>
0 голосов
/ 25 мая 2009

Вы сказали в комментарии, что в таблице изначально было написано «[BLOB - 64,0 КиБ]», но затем вы изменили ее на «MEDIUMBLOB». Это увеличит размер, который вы можете хранить, но все ваши существующие данные все равно будут обрезаны до 64 КБ.

Убедитесь, что тип поля, который вы используете, достаточно велик для хранения данных, которые вы хотите сохранить (16 МБ в MEDIUMBLOB или ~ 4 ГБ в LONGBLOB, я почти уверен), а затем повторно вставьте все свои данные.

Кроме упомянутых проблем безопасности, я не понимаю, почему код не должен работать, кроме проблем с базой данных.

0 голосов
/ 25 мая 2009

может быть, вы могли бы попробовать

$row = mysql_fetch_assoc($result);

вместо

$row = mysql_fetch_array($result);
0 голосов
/ 25 мая 2009

Несколько вещей, чтобы попробовать

  1. возможно, что-то не так, и он возвращает сообщение об ошибке в HTML вместо ожидаемого изображения

  2. - это тип содержимого, правильно сохраненный в базе данных, или вы просто сохраняете расширение файла изображения

тип контента должен выглядеть примерно так

image/gif 
image/jpeg
0 голосов
/ 25 мая 2009

Похоже, это может сработать, что не так?

Попробуйте указать поля явно:

 SELECT image, image_type FROM ...

Что происходит, когда вы запускаете запрос из базы данных?

Вы загружаете изображение как:

<img src="image.php?id=12">

Или вы загружаете PHP как его собственную страницу?

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