2014-11-16 4 views
0

Я пытаюсь отобразить изображение из базы данных MySQL на веб-странице с помощью PHP.
Я знаю, что это не самый эффективный метод, но все же я хотел бы посмотреть, как это делается ....Показать изображение из базы данных MySQL с помощью PHP

Чтобы вставить изображение в базу данных я использую этот код:

//Get File 
File file = new File("C:\\Users\\blah\\blah\\blah\\WebcamImage\\" + name); 
FileInputStream fileStream = new FileInputStream(file); 

//Prepared Statement 
pStmt = connection.prepareStatement("INSERT INTO table (webcamPic1) values (?)"); 
pStmt.setBinaryStream(1, fileStream, (int) file.length()); 
pStmt.executeUpdate(); 

Чтобы отобразить изображение на сайте, я в настоящее время этот PHP код:

$result = mysqli_query($con,"SELECT * FROM table"); 

header('Content-Type: image/jpeg;'); 

echo "<table border='1' title='WEBCAM'> 
    <caption>WEBCAM</caption> 
    <tr> 
    <th>WEBCAM 1</th> 
    </tr>"; 

while($row = mysqli_fetch_array($result)) 
{ 
    echo "<tr>"; 
    echo "<td>" . $row['webcamPic1'] . 
    "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 

mysqli_close($con); 

на веб-странице файл отображается как беспорядок символов, как это:

ÿØÿàJFIFÿÛC $. ' "# (7), 01444'9 = 82 < .342ÿÛC
2 !! 22222222222222222222222222222222222222222222222222ÿÀz £! ŸÄÿÄC 1AQa!" Q2'¡ полуэтаж # Bá3RÑðbrñ $ 4CSc ™ с «ÂÒÿÄÿÄ (! 1AQa" 2q'¡ðBÿÚ? ûö "ã = -ο0Xa~ @ • 7BÀ" "BTà÷@DÂ.ÂŬ' 7 ...... Óc¨L1" ¡£ ì · 2 € Ä #? tû7A'öTl ¢ ƒÂEEUn @ BØ @ r ° @ Â% TCŠ (€ ± @, ± @ # "" RBÔB' } '¢ μ! • HHá>' ± '') DÝ "% @ Í7 Ì ((hTm ¥) U æð| [ì¨'6HE¾Pl% sA" æ [ÔûJ¨ <© ооо ° 7s IAP € N ": μþ|³Ó ÷ 5¨Ò¼Ñ © YI ÷] âäŸöG'àèVqw« ý & Çì¹êøY & «¡Y²ñ¹Wg) ± Ài ‡ · òYCÿ_ ¥ 4 ÷ NÜ.m~, ƒ "¨g²3öEdÃBžrº¿^· º • Fl! 5Õ" NxZ0P ... ¯> ê¨ ¢ ¡Aº £ eFYD-! E •) Â,ÓÙ>! • Xª 2^Pct§ • B ' tŽmÐ) e¨ $ B <Ç Q ¥ • V¹Af: EøU "£ Kð®¡OμÒk 8) œ • r> lØýղР¢ êRçÔm¡HÔp0, ¹qàé [¢ h ~ ³kêäRË) vîîë · ãžØåßD «ГПР« + ÑÆ9 × gƒž0ºü; \ Uo> Pa $ C «Ð ÷ Sòðùqþ ‰ Сус«Ó> Ağ =Ö^z>UëL”Àñu0ÇdgªŠåü‘Y8„%[email protected]@dÃ(0ˆˆ¼ +| ל¦‚xEY„£÷TˆƒÙÁ[¿T-•” ìUYˆ?+ <#‰ES зоть <€ è (* a4 E • jRBƒÂ ¸YEÌIÌ ¨ ° ((× Bekina @ dvYX € «‰ TIÀ © Pm ·» ûP

Очевидно, что я делаю что-то очень неправильно. Каков правильный способ отображения истинного изображения?

спасибо.

+1

Почему вы не просто хранить путь к картинке и затем сохранить изображение в папке на сервере? Тогда у вас в базе данных намного меньше кода. – uruloke

+0

@uruloke Ада намного эффективнее. – Boann

+0

@Boann И намного дешевле, как если бы вы не принимали себя, тогда хранилище базы данных намного дороже, чем обычное хранилище. – uruloke

ответ

4

Вы смешиваете два разных содержимого в одном HTTP-ответе - он не работает таким образом, и вы не можете отправлять HTML и изображения вместе, поскольку HTTP не поддерживает мультиплексирование (например, SPDY). Так что это неправильно в том, как вы это делаете, так как браузер НЕ ожидает этого и не может отделить его от другого, учитывая все данные, которые он получает в этом ответе, как HTML-документ, следовательно, вы видите мусор, поскольку он ожидает текста и обрабатывает все это как например. Чтобы сделать это правильно, у вас должен быть отдельный PHP-скрипт, который будет возвращать содержимое изображения, но запрос на него должен поступать из браузера. Таким образом, вы должны просто вернуть URL в скрипт изображения в SRC для изображения:

<img src="image.php"> 

и вывод изображения из image.php если так.

Кроме того, ваш текущий код код не имеет смысла с другой причине тоже:

header('Content-Type: image/jpeg;'); 
echo "<table border='1' title='WEBCAM'> 

поскольку HTML является НЕimage/jpeg типа.

PS: хранение изображений в базе данных считается очень плохой идеей. Храните изображения на диске и сохраняйте ссылки на него только в своих записях db.

+0

Хорошо, поэтому я вижу, что я об этом ошибаюсь. Как бы вы разместили изображения на веб-странице? У меня есть изображение, сохраненное в папке на моем компьютере, так как я могу получить это до веб-страницы? любое руководство будет с благодарностью оценено. –

+0

Не на вашем компьютере. Вам нужно иметь изображение на вашем ** веб-сервере **. Я говорю, что вы должны сопротивляться хранению его в базе данных. У вас должна быть папка «images /» и помещать туда все файлы изображений, а затем просто хранить ссылки для получения изображений в БД, если вам нужно. Это намного лучше, потому что изображение обслуживается вашим веб-сервером, так что браузер может пропускать выборку изображений, если она уже есть в кеше. Ваш код не поддерживает это, поэтому вы обслуживаете все изображения независимо от того, что. Это потеря полосы пропускания и т. Д. –

+0

Спасибо, Марцин, я собираюсь пересмотреть это и следовать вашему руководству. –

0

Существует способ этого попробовать что-то вроде этого:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA 
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" /> 

данные URI нотации должны делать эту работу.

Последняя часть uri i base64 кодированное изображение. Так что вы просто должны получить данные изображения из базы данных кодировать его с base64_encode, а затем вернуть его в браузер

Более подробно проверить это: http://en.wikipedia.org/wiki/Data_URI_scheme

Смежные вопросы