我有此客戶將文件保存爲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
我只是想你的代碼與示例值(編碼文件),似乎沒有任何問題。我可以很好地運行腳本,文件下載,並且我可以在Windows照片查看器(Win 7)和Irfanview中無誤地打開圖像。從數據庫讀取數據或者某些圖像在數據庫中損壞時可能會出現錯誤? – Haprog
基本上我只是這樣做的:'header('Content-type:image/png'); header('Content-Disposition:attachment; filename =「test.png」'); echo base64_decode('iVBORw ...長串base64數據...SuQmCC'); die();' – Haprog