Невозможно отобразить загруженные изображения через PHP в MySQL - PullRequest
0 голосов
/ 09 февраля 2012

Я сократил свой код до минимума, чтобы выяснить, почему я не могу отобразить любое изображение, которое я загружаю и сохраняю через PHP в MySQL.Если кто-то может указать на мои ошибки, я был бы очень признателен.

При выполнении браузер сообщает, что изображение не может быть отображено, поскольку оно содержит ошибки.

Однако изображениепрекрасно загружает и отображает в других базах данных, работающих в этой же среде.

Я проверил, что база данных содержит большой двоичный объект после загрузки.

Полагаю, мне не хватает чего-то очевидного.

Загрузить форму ..

<body>
<form enctype="multipart/form-data" action="imagetestprocess.php" method="post">
<input type="file" name="image">
<input type="submit" value="Submit">
</form>

Обработчик формы ..

<?php
include("../mylibrary/login.php");

login();

$imagefile = file_get_contents($_FILES['image']['tmp_name']);
$imagefile = mysql_real_escape_string($imagefile);
$query="UPDATE pieces SET image_full='$imagefile' WHERE assetno='1'";
$result = mysql_query($query);

?>

Отображение изображения ..

<?php
include("../mylibrary/login.php");

login();
echo "<body>";
echo "before";
echo "<img src=\"showimage.php\" alt=\"showimage\">";
echo "after";

?>

вызванная функция ...

<?php
include("../mylibrary/login.php");
login();
$query = "select * from pieces where assetno='1'";
$result=mysql_query($query);
$row=mysql_fetch_array($result, MYSQL_ASSOC);
$image=$row['image_full'];
header("Content-type: image/jpeg"); 
echo $image;
?>

Ответы [ 4 ]

1 голос
/ 09 февраля 2012

измените тип поля image_full на MEDIUMBLOB / BLOB

используйте это $image = chunk_split(base64_encode(file_get_contents("image.jpg"))); вместо $imagefile = file_get_contents($_FILES['image']['tmp_name']);

и в функции показа изображения используйте изображение как показано ниже.

header("Content-type: image/jpeg"); 
echo base64_decode($image);
0 голосов
/ 09 февраля 2012

Я думаю, это как-то связано с кодировкой вашей базы данных. некоторая кодировка не поддерживает двоичные данные.

Если вы не можете изменить кодировку, возможно, вы css base64 кодируют данные перед сохранением и декодируют их при отображении. единственное, что base64 увеличит размер на 3.

0 голосов
/ 09 февраля 2012

Если вышеуказанные решения не работают для вас.Попробуйте увеличить длину поля в базе данных.если все еще это не работает, Вы можете проверить, является ли формат изображения RGB или CMYKформат должен быть RGB, чтобы видеть на экране.Чтобы убедиться, что вы можете попробовать открыть тот же файл изображения в браузере.

0 голосов
/ 09 февраля 2012

используйте mysql_escape_string или addlashes и очистите кеш браузера, чтобы увидеть, работает ли он

...