2015-05-04 157 views
0

我有此客戶將文件保存爲base64到MEDIUMBLOB字段(請不要問爲什麼)。使用PHP將base64映像保存到MySQL blob字段

中的文件被保存這樣的:

$file  = file_get_contents($_FILES['file']['tmp_name']); 
$file  = base64_encode($file); 
$file  = mysql_real_escape_string($file); 
$file_name = mysql_real_escape_string($_FILES['file']['name']); 
$file_ext = mysql_real_escape_string($_FILES['file']['type']); 

$sql = "INSERT INTO $file_table_name (file, file_name, file_ext) VALUES ('$file', '$file_name', '$file_ext')"; 

這是我使用強制下載文件的代碼:

header('Content-type: ' . $data->file_ext); 
header('Content-Disposition: attachment;filename="' . $data->file_name . '"'); 
echo base64_decode($data->file); 
die(); 

出於某種原因,這正常工作與PDF文件,但不是圖像文件。當我嘗試在Windows Preview中打開文件時,它會顯示:「Windows照片查看器無法打開此圖片,因爲文件看起來已損壞,損壞或太大」。原始文件是〜150KB。

如果我這樣做;

echo '<img src="data:' . $data->file_ext . ';base64,'.$data->file.'" />'; 
die(); 

...圖像看起來不錯,我可以保存圖像(另存爲)沒有問題。

任何人都知道我在做什麼錯了?我是否缺少任何標題?


更新與從DB值:

FILE_NAME: 'test.png'
file_ext: '圖像/ PNG'
文件:https://gist.githubusercontent.com/horgen/25298f2689d9aed865db/raw/gistfile1.txt

原始文件:http://cl.ly/image/2o3X3u3a0V0S
編碼文件:http://cl.ly/image/1S3K3v0x0U0p

+1

我只是想你的代碼與示例值(編碼文件),似乎沒有任何問題。我可以很好地運行腳本,文件下載,並且我可以在Windows照片查看器(Win 7)和Irfanview中無誤地打開圖像。從數據庫讀取數據或者某些圖像在數據庫中損壞時可能會出現錯誤? – Haprog

+1

基本上我只是這樣做的:'header('Content-type:image/png'); header('Content-Disposition:attachment; filename =「test.png」'); echo base64_decode('iVBORw ...長串base64數據...SuQmCC'); die();' – Haprog

回答

1

嘗試使用readfile(base64_decode($ data-> file))而不是echo。

+0

這不起作用:\ – horgen

+2

'readfile()'會嘗試從文件系統中讀取文件並輸出該文件,這不是這裏所需要的。 – Haprog

1

你可以嘗試

echo base64_decode(str_replace(' ', '+', $data->file)); 

base64_decode()並在網頁上的評論見PHP手冊頁。

1

是的..這是尷尬..我發現了問題。這是一個WordPress的網站,我有這個function.php文件,我包括我的所有功能。出於某種原因,此項目的以前的開發人員在functions.php中包含了一個php文件。所包含的文件有一些空格/選項卡中的「PHP」 - 標籤之前,這所產生的解碼文件中的換行符:S

不管怎麼說,謝謝大家試圖幫助我:)

相關問題