PHP / MySQL - 显示来自blob的图像[重复]

Posted

技术标签:

【中文标题】PHP / MySQL - 显示来自blob的图像[重复]【英文标题】:PHP/MySQL - show image from blob [duplicate] 【发布时间】:2014-03-19 17:43:20 【问题描述】:

我创建了一个 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 >
<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`)
) 

非常感谢您的帮助!

【问题讨论】:

首先,$row['data'] 打印什么? 整个页面都充满了类似的符号:�PNG IHDR;����bKGD������� IDATx���y� 我建议避免存储在数据库中的图像/文件。尝试上传并存储在文件夹中。现在您认为图像/文件大小很小,但将来数据库大小会非常高.. ..... 【参考方案1】:

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

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

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

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

【讨论】:

@BillyBigPotatoes 的帖子已经解决了这个问题,更不用说,出于性能考虑,您是一直想从数据库中加载图像还是缓存它?【参考方案2】:

有两种方法可以做到这一点:

您可以使用内联 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

【讨论】:

【参考方案3】:

试试这个;

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'].'" />';

【讨论】:

以上是关于PHP / MySQL - 显示来自blob的图像[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 从 MYSQL 中插入和检索图像 blob?

显示存储为 MySQL 数据库中 BLOB 数据的所有图像

使用PHP加密图像以便在MySQL BLOB中存储然后解密和打印

使用 javascript 和 websockets 显示来自 blob 的图像

在 JSF 数据表中显示来自 MySQL 数据库的图像 [关闭]

Vue 显示来自 firebase 云存储 blob 的图像