我正在尝试使用PHP在网页上显示来自MySQL数据库的图像。
我知道这不是最有效的方法,但我仍然希望看到它是如何完成的......
要将图像插入数据库,我使用此代码:
//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&LT;.342ÿÛC
2 !!22222222222222222222222222222222222222222222222222ÿÀz£!ÿÄÿÄC!1AQa“q2'¡±A#$Bá3RÑðbrñ¢4CSc S'“ÂÒÿÄÿÄ(!1AQa”2q'¡ðBÿÚ?UO“A =-Ù0Xa~@•7BÀÙ”BTà÷@DÂ.€ Ŭ' 7 ......Óc¨L1“¡€”·2€Ä#?tû7A'öTl¢ÂEEUn@BØ@ r°@Â%TCŠ(€±@,±@#“”RBÔB“ }'¢μ!•HHá>'±'')DÝ“%@Í7Ì((hTm¥)Uæð| [¨¨'HEHEPl%sA”æ[ÔûJ¨<©OHh°7s IAP€N“:μþ|³Ó÷5¨Ò¼Ñ©YI÷]'âäŸöG'àèVqw«ý&安培;Çì¹êøY&安培;'¡Y²ñ¹Wg)±AI ‡·òYCÿ_¥4÷NÜ.m〜,ƒ“¨g²3öEdÃBžrº¿^·ºá•Fl!5Õ”NxZ0P ...¯&gt;ꨢ ¡Aº£eFYD-!E•)Â,ÙÙ>!•Xª2^Pct§•B'tŽmÐ)e¨$ B <Ç Q¥•V¹Af:EøU“£ Kð®'OμÒk8) - •r>lØýղТêRçÔm¡HÔp0,¹qàé[¢h~³kêäRË)vîîëãžØåßD«YpÕ«+ÑÆ9× gƒž0ºü; \Ú>>Pá$ C “Ð÷Sòðùqþ‰ÇŸ”Ó&gt;Âg=Ö^z>UëL”Àñu0ÇdgªŠåü‘Y8„%0@@dÃ(0ˆˆ¼ +| ל¦‚xEY„£÷TˆƒÙÁ[¿T-•” ìUYˆ?+ <#‰ES
Žot<(*Â4E•jRBƒ¸YEÌĮ°((×BèkïÑA@ dvYX€‰) TIA©PM·” UP
显然我做错了。显示真实图像的正确方法是什么?
谢谢。
答案 0 :(得分:4)
您在单个HTTP响应中混合了两个不同的内容 - 它不能以这种方式工作,并且您无法发送HTML和图像,因为HTTP不支持多路复用(例如SPDY)。因此,这样做是错误的,因为浏览器并不期望这样做,并且无法将其中的一个与另一个分开,因为它在此响应中接收的所有数据都是HTML文档,因此您看到垃圾,因为它需要文本并将其全部处理为这样。要做到这一点,你应该有单独的PHP脚本来返回图像内容,但是它的请求应该来自浏览器。因此,您只需在SRC
for image:
<img src="image.php">
并从image.php
输出图像,如果是的话。
此外,您的代码当前代码也没有其他原因:
header('Content-Type: image/jpeg;');
echo "<table border='1' title='WEBCAM'>
因为HTML是 NOT image/jpeg
类型。
PS:将图像存储在数据库中被认为是非常糟糕的主意。将映像存储在磁盘上,并仅在db记录中保留对它的引用。
答案 1 :(得分:0)
有尝试这样的方法:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
数据uri表示法应该完成这项工作。
uri i base64编码图像的最后一部分。 所以你应该从数据库获取你的图像数据用base64_encode编码然后将它返回到浏览器