PHP / MySQL - 从blob显示图像

时间:2014-02-19 11:54:22

标签: php mysql database image blob

我已经创建了一个php页面,您可以上传图像/文件,将其保存在我的数据库中,类型为“mediumblob”。现在我陷入困境,无法弄清楚如何从数据库中显示这些图像。我在大写字母中写道,我想打印出图像。

<?php
$dbLink = new mysqli('127.0.0.1', 'root', '', 'test');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}

$sql = 'SELECT `id`, `name`, `mime`, `size`, `created`, `data` FROM `file`';
$result = $dbLink->query($sql);

if($result) {
// Kolla om det finns några filer i databasen
if($result->num_rows == 0) {
echo '<p>There are no files in the database</p>';
}
else {

echo '<table width="100%">
<tr>
<td><b>Name</b></td>
<td><b>Mime/type</b></td>
<td><b>Size (bytes)</b></td>
<td><b>Created</b></td>
<td><b>Image</b></td>
</tr>';

while($row = $result->fetch_assoc()) {
echo "
<tr>
<td>{$row['name']}</td>
<td>{$row['mime']}</td>
<td>{$row['size']}</td>
<td>{$row['created']}</td>
//THIS IS WHERE I'M SUPPOSED TO PRINT OUT THE IMAGES
</tr>";
}



echo '</table>';
}
}

else
{
echo 'Error! SQL query failed:';
echo "<pre>{$dbLink->error}</pre>";
}
echo '<p>Click <a href="index.html">here</a> to go back</p>';
// Close the mysql connection
$dbLink->close();
?>

这是我在数据库中的表格:

CREATE TABLE `file` (
`id` Int Unsigned Not Null Auto_Increment,
`name` VarChar(255) Not Null Default 'Untitled.txt',
`mime` VarChar(50) Not Null Default 'text/plain',
`size` BigInt Unsigned Not Null Default 0,
`data` MediumBlob Not Null,
`created` DateTime Not Null,
PRIMARY KEY (`id`)
) 

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

如果BLOB包含图像的二进制数据,那么您需要获取内容并将其写入文件,从而生成图像。

 file_put_contents($path."path/to/image/".$row['name'], base64_decode($row['image']));

然后正常调用它。当然..在编写之前检查文件是否存在:)

或者,您可以编写一个脚本来直接输出图像,如下所示。

答案 1 :(得分:1)

这样做有两种方法:

您可以使用内联base64编码。你可以这样做,假设你的图像是jpeg:

echo '<td><img src="data:image/jpeg;base64,'.base64_encode($image);.' /></td>';

下一个选项是创建一个名为image.php的PHP文件,该文件将图像的ID作为参数,然后输出图像。您的HTML将如下所示:

<td><img src="image.php?id={$row['id']}"></td>

无论如何,在这个问题上有很多回答的主题。你可以看一下这个例子: I need my PHP page to show my BLOB image from mysql database

答案 2 :(得分:0)

试试这个;

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');
header('Content-length: '.$row['size']);
header('Content-Type: '.$row['mime']);
header('Content-Disposition: attachment; filename='.$row['name']);
echo '<img src="'.$row['data'].'" />';