在我的mysql数据库中显示图像时遇到大问题
我将它存储在longblob类型
中当显示图像时,我得到一个损坏的图像图标
这里是存储图像的代码
if(isset($_FILES['image']) && $_FILES['image']['size'] > 0 && isset($_POST['photoName']))
{
//temporary file name
// Temporary file name stored on the server
$tmpName = $_FILES['image']['tmp_name'];
$imageType = $_FILES['image']['type'];
// Read the file
$fp = fopen($tmpName, 'r');
$data = fread($fp, filesize($tmpName));
$data = addslashes($data);
fclose($fp);
$sql="INSERT INTO photos (photoName, caption, photoData, photoType, userName)
VALUES
('$_POST[photoName]','$_POST[caption]','$tmpName','$imageType', '$currentUser')";
//For debugging purposes
if(!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
else
{
echo "Your Image has been Added";
}
}
然后打印图像
if(isset($_POST['usersImage'])){
//code to show images
$user = $_POST['usersImage'];
$sql = "SELECT * FROM `photos` WHERE userName = '$user'";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result))
{
switch ($row['photoType']) {
case 'image/jpeg':
echo "<tr>";
echo '<img src="data:image/jpeg;base64,'. base64_encode($row['photoData'])."\"></td>";
echo "</tr>";
//echo '<img src="image>' .$row['photoData']. '.jpeg'.'</p>';
//echo '<p id="caption">'.$row['caption'].' </p>';
break;
}
}
}
你可以看到我最近的尝试是使用base64编码打印出图像 我以前的尝试是注释掉的代码
答案 0 :(得分:3)
当您显示图像时,它必须来自其自己的请求。 src=""
应包含脚本的网址,该脚本将使用正确的MIME标头image/jpeg
传送内容。
<?php
$photo_bin = //binary data from query here;
header("Content-Type: image/jpeg"); // or whatever the correct content type is.
echo $photo_bin;
浏览器可以从img
标记请求的PHP脚本的快速示例。
答案 1 :(得分:1)
验证很重要。您正在为自己打开这么多安全问题。
永远不要在sql语句中使用$ _POST / $ _GET。逃避它们,更好的是,使用PDO语句。验证图像实际上是图像,此时,您可以在表格中输入任何类型的文件。
正如您所发现的,在数据库中存储图像比在文件系统上存储图像要困难得多。通常,将文件存储在文件系统上的参数远远多于在表格内部存储的参数。
快速查看插入代码,我不太清楚为什么要在二进制数据中添加斜杠。删除对addslahes的调用,然后尝试。