Znalazłem wiele tutoriali odnośnie tego zagadnienia. Jednak nawet kiedy używam kodów z tutoriali nie działają one u mnie poprawnie (?!).
Upload działa poprawnie. Plik znajduje się w bazie. Następnie gdy próbuję go wyciągnąć zaczyna się zabawa:
FF wyświetla mi jedynie link (którego nigdzie w kodzie nie wyświetlam)
Chrome chce wyświetlić obrazek, ale jakby nie wiedział strumienia znaków.
Opera również ma pole z obrazkiem, którego nie wyświetla, ale kiedy zapisuję obrazek to na dysku jest zapisany poprawny (czyli dysk->baza->webpage nie działa, dysk->baza->dysk działa).
Pliku wczytuję podając adres w którym wpisuję id zdjęcia które sprawdzam sobie w bazie np. http://localhost/display.php?id=4 (czyli napjrościej jak się da do celów testowych)
Czy ktoś mógłby mi pomóc. Nie wiem gdzie robię błąd w tak prostym kodzie, a to powoduje wzrost frustracji.
struktura bazy:
CREATE TABLE IF NOT EXISTS `avatars` (
`avatar_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`image_type` varchar(11) CHARACTER SET utf8 NOT NULL,
`avatar_data` mediumblob NOT NULL,
PRIMARY KEY (`avatar_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
mam prosty formularz w pliku blob.php:
CODE
<head>
<title>blob</title>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
<meta http-equiv="Content-Language" content="pl" />
</head>
<body>
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<input type="file" name="imgfile">
<input type=submit value="Dodaj">
</form>
</body>
upload.php
CODE
<?php
require_once('CDatabase.php');
$connection = CDatabase::connect();
try{
if($_FILES['imgfile']['size'] <= 0)
throw new Exception ("Plik nie został załadowany");
$tmpName = $_FILES['imgfile']['tmp_name'];
$fp = fopen($tmpName, 'r');
$imgContent = fread($fp, filesize($tmpName));
$imgContent = addslashes($imgContent);
fclose($fp);
$fileType = $_FILES['imgfile']['type'];
$query = $connection->query("insert into avatars values(NULL, '$fileType', '$imgContent')");
if (!$query)
throw new Exception("Zapytanie nie powiodło się");
} catch (Exception $e){
echo $e->getMessage();
exit(); }
mysqli_close($connection);
?>
oraz display.php
CODE
<?php
require_once('CDatabase.php');
$connection = CDatabase::connect();
try {
$id = $_GET['id'];
$query = $connection->query("SELECT image_type, avatar_data FROM avatars WHERE avatar_id = '$id'");
if (!$query)
throw new Exception("Zapytanie nie powiodło się");
$temp = $query->fetch_assoc();
$type = $temp['image_type'];
header("Content-type: $type");
echo $temp['avatar_data'];
} catch (Exception $e){
echo $e->getMessage();
exit();
}
mysqli_close($connection);
?>