php - 使用 PHP 显示来自 MySQL 数据库的图像

标签 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<.342ÿÛC
2!!22222222222222222222222222222222222222222222222222ÿÀz£!ÿÄÿÄC!1AQa"q2‘¡±Á#Bá3RÑðbrñ$4CSc¢s’“ÂÒÿÄÿÄ(!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¨‹©OHh°7s Iáp€Ñ¨":µþ¦³Ó÷5¨Ò¼Ñ©ÿí÷]'âäŸöG'àèVqw«ý&Çì¹êøY&'¡Y²ñ¹Wg)±Âï ‡·òYCÿ_¥4÷NÜ.m˜,ƒ„¨g²3öEdÃBžrº¿^·º á•Flˆ!5Õ„NxZ0ˆP…¯>ꨢ ¡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«YpÕ«+ÑÆ9× gƒž0ºü;\ÚÕ›Pá$C“Ð÷Sòðùqþ‰ÇŸÇ“Ó>Âg=Ö^z>UëL”Àñu0ÇdgªŠåü‘Y8„%0@@dÃ(0ˆˆ¼ +| ל¦‚xEY„£÷TˆƒÙÁ[¿T-•” ìUYˆ?+ <#‰ESŽot‹­€è(*Â4 E•jRBƒÂ ¸YEÌIÌ ¨°((×BèkïÑA@dvYX€”‰TIÀ©Pm·”ûP

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

谢谢。

最佳答案

您在单个 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:将图像存储在数据库中被认为是非常糟糕的主意。将图像存储在磁盘上并仅在您的数据库记录中保留对它的引用。

关于php - 使用 PHP 显示来自 MySQL 数据库的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26959105/

相关文章:

php - 如何捕获 PHP 致命 (`E_ERROR` ) 错误?

php - 如何跟踪 MySQL 表中刚刚删除的行?

mysql - 基于多行选择

php - 将数组的多个值插入数据库

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等…期望参数1为资源或结果

php - paypal Website Payments Pro Hosted Solution Iframe 的工作示例?

php - 我可以使用 isset() 来控制 mysql 查询的执行吗

php - 包含文件的全部内容并回显它

java - 是否可以在一个属性文件中包含两个不同的数据库属性?

mysql - Indivo数据库的安装-测试Indivo后端服务器时出错