使用PHP显示MySQL数据库中的图像

时间:2014-11-16 16:15:30

标签: php mysql

我正在尝试使用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

显然我做错了。显示真实图像的正确方法是什么?

谢谢。

2 个答案:

答案 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编码然后将它返回到浏览器

有关详情,请查看: http://en.wikipedia.org/wiki/Data_URI_scheme