2012-02-09 98 views
0

我已經修剪我的代碼到最低限度,試圖找出爲什麼我不能顯示任何圖像,我通過PHP上傳到MySQL的任何圖像。如果有人能指出我的錯誤,我會非常感激。無法顯示通過PHP上傳的圖像到MySQL

執行時,瀏覽器報告圖像不能顯示,因爲它包含錯誤。

但是,圖像上傳&在同一環境中運行的其他數據庫中顯示正常。

我已檢查數據庫上傳後是否保留有斑點。

我想我錯過了一些明顯的東西。

上傳的形式..

<body> 
<form enctype="multipart/form-data" action="imagetestprocess.php" method="post"> 
<input type="file" name="image"> 
<input type="submit" value="Submit"> 
</form> 

表單處理程序..

<?php 
include("../mylibrary/login.php"); 

login(); 

$imagefile = file_get_contents($_FILES['image']['tmp_name']); 
$imagefile = mysql_real_escape_string($imagefile); 
$query="UPDATE pieces SET image_full='$imagefile' WHERE assetno='1'"; 
$result = mysql_query($query); 

?> 

圖像顯示器..

<?php 
include("../mylibrary/login.php"); 

login(); 
echo "<body>"; 
echo "before"; 
echo "<img src=\"showimage.php\" alt=\"showimage\">"; 
echo "after"; 

?> 

調用的函數...

<?php 
include("../mylibrary/login.php"); 
login(); 
$query = "select * from pieces where assetno='1'"; 
$result=mysql_query($query); 
$row=mysql_fetch_array($result, MYSQL_ASSOC); 
$image=$row['image_full']; 
header("Content-type: image/jpeg"); 
echo $image; 
?> 

回答

1

變化image_full字段類型MEDIUMBLOB/BLOB

用戶這個$image = chunk_split(base64_encode(file_get_contents("image.jpg")));$imagefile = file_get_contents($_FILES['image']['tmp_name']);

代替和在顯示圖像功能使用圖像如下。

header("Content-type: image/jpeg"); 
echo base64_decode($image); 
+0

嗨,謝謝你的回覆。 image_full字段已經是mediumblob。 Did you mean .. $ imagefile = chunk_split(base64_encode(file_get_contents($ _ FILES ['image'] ['tmp_name']))); 恐怕沒有什麼區別。 – Paul 2012-02-09 10:03:42

+0

midiumblob很好。並且編碼會對您的file_get_content進行編碼,因此您不會遇到垃圾字符問題.chunk_split會將字符串拆分爲更小的塊,以便在字符串較大時閱讀圖像內容。 – 2012-02-09 11:46:56

0

使用函數mysql_escape_string或和addslashes和清除瀏覽器緩存,看看它是否工作

0

如果以上方法不爲你工作。 嘗試增加數據庫中字段的長度。 如果它仍然不起作用, 您可以檢查圖像格式是RGB還是CMYK。格式應該是RGB在屏幕上看到的。 爲了確保您可以嘗試在瀏覽器中打開相同的圖像文件。

+0

是的,我可以在Firefox中打開源文件,沒問題。該圖像是圍繞50K&我將其存儲在MEDIUMBLOB – Paul 2012-02-09 10:06:55

+0

好的, 赤爲 如果($ _FILES [「文件」] [「錯誤」]> 0){ 回聲「在文件上傳一些錯誤」; } 但我認爲它不是好的做法,保存圖像在數據庫中。 更好的方法是使用move_uploaded_file()將圖像保存到服務器中,並僅將圖像路徑保存到數據庫中。 – rajesh 2012-02-09 10:58:33

0

我認爲這與你的數據庫編碼有關。某些編碼不支持二進制數據。

如果你不能改變編碼,也許你保存和解碼它之前,css base64編碼數據顯示時。唯一的事情是base64會增加3的大小。