![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 11.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
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); ?> |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Może przewrotnie - po co chcesz trzymać avatary w bazie?
Ja wiem, że są małe ale dla każdego usera musisz wyciągać avatar więc dodajesz pracy serwerowi. Lepiej użyć mechanizmów które są do tego przeznaczone czyli url do normalnego pliku ;] |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 11.01.2011 Ostrzeżenie: (0%) ![]() ![]() |
piszę portal na zaliczenie.
Jednym z wymagań jest to, aby wszystkie grafiki były zapisane w BLOBie. Oczywiście, że gdyby nie ten wymóg to zrobiłbym to na url-ach. Ten post edytował jackow 11.01.2011, 22:41:28 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:29 |