2014-02-19 225 views
1

我已經做了一個php頁面,您可以上傳將保存在我的數據庫中的圖像/文件作爲類型「mediumblob」。現在我陷入困境,無法弄清楚如何從數據庫中顯示這些圖像。我用大寫字母打印了圖像。PHP/MySQL - 從blob顯示圖像

<?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`) 
) 

非常感謝您的幫助!

+0

那麼首先,{$ row ['data']}打印什麼? – berentrom

+0

整個頁面只是充滿了這樣的符號: PNGIHDR; bKGD IDATx y – user3327442

+1

我建議避免圖像/文件存儲在db.try中上傳並保存在folders.now你認爲圖像/文件的大小很小,但在未來的數據庫大小將極其高....... –

回答

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

爲什麼img標籤? – EJTH

1

如果BLOB包含圖像的二進制數據,所以您需要獲取內容並將其寫入文件,從而生成圖像。

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

然後正常地調用它。當然..在寫它之前檢查文件是否存在:)

或者,你可以編寫一個腳本來直接輸出圖像,如下所示。

+0

@BillyBigPotatoes這篇文章已經解決了這個問題,更不用說,出於性能的考慮,你是否總是希望從數據庫加載圖像或緩存它? – bear

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