我有一个调用数据库类的函数,并要求提供图像列表。 以下是功能。
//Hämtar en array av filer från disk.
public function GetFiles()
{
$sql = "SELECT pic FROM pictures";
$stmt = $this->database->Prepare($sql);
$fileList = $this->database->GetAll($stmt);
echo $fileList;
if($fileList)
{
return $fileList;
}
return false;
}
这是GetFiles调用的数据库类方法。
public function GetAll($sqlQuery) {
if ($sqlQuery === FALSE)
{
throw new \Exception($this->mysqli->error);
}
//execute the statement
if ($sqlQuery->execute() == FALSE)
{
throw new \Exception($this->mysqli->error);
}
$ret = 0;
if ($sqlQuery->bind_result($ret) == FALSE)
{
throw new \Exception($this->mysqli->error);
}
$data = array();
while ($sqlQuery->fetch())
{
$data[] = $ret;
echo $ret;
}
$sqlQuery->close();
return $data;
}
GetFiles函数返回值稍后由另一个函数
处理public function FileList($fileList)
{
if(count($fileList) == 0)
{
return "<p class='error'> There are no files in array</p>";
}
$list = '';
$list .= "<div class='list'>";
$list .= "<h2>Uploaded images</h2>";
foreach ($fileList as $file) {
$list .= "<img src=".$file." />";
}
$list .= "</div>";
return $list;
}
但是我的数据库只是返回longblob作为很多carachters,我如何让longblob显示为图像?
答案 0 :(得分:5)
您需要对其进行base64编码并通过数据URI传递,例如
<img src="data:image/jpeg;base64,<?php echo base64_encode($file) ?>" />
然而,如果您正在提供大型的&#34;图片,这将是一个可怕的膨胀页面,绝对没有办法缓存图像数据,以便以后为用户节省下载流量。使用明确的图像服务脚本(例如
)会更好<img src="getimage.php?imageID=XXX" />
然后在该脚本中包含您的db代码:
$blob = get_image_data($_GET[xxx]);
header('Content-type: image/jpeg');
echo $blob;
这样的问题是为什么从数据库中提供图像通常是一个坏主意。
答案 1 :(得分:1)
如果您将其嵌入网页的一部分,则应使用data
URI scheme。
最好将<img>
标记指向一个PHP文件,该文件设置正确的Content-Type
标头并转储图像数据。
答案 2 :(得分:0)
我建议您将图像保存到文件系统并从中加载,原因如下:
查看CDN选项。
如果你坚持
$list = sprintf("<img src=\"data:image/jpeg;base64,%s\" />",base64_encode($file));