簡體   English   中英

使用PHP將base64映像保存到MySQL blob字段

[英]Saving a base64 image to a MySQL blob field with PHP

我有這個客戶將文件保存為base64到MEDIUMBLOB字段(請不要問為什么)。

文件保存如下:

$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預覽中打開文件時,它說:“Windows Photo Viewer無法打開此圖片,因為該文件似乎已損壞,損壞或太大”。 原始文件大約150KB。

如果我這樣做;

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

...圖像看起來很好,我可以保存圖像(另存為)而不會出現問題。

誰知道我做錯了什么? 我錯過任何標題嗎?


使用DB中的值更新:

file_name: 'test.png'
file_ext: 'image / png'
文件: https //gist.githubusercontent.com/horgen/25298f2689d9aed865db/raw/gistfile1.txt

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

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

你可以試試

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

請參閱PHP手冊頁以獲取base64_decode()以及頁面上的注釋。

是的..這很尷尬..我發現了問題。 這是一個Wordpress網站,我有這個functions.php文件,其中包含我的所有功能。 出於某種原因,該項目的前任開發人員在functions.php中包含了一個php文件。 包含的文件在“php”-tag之前有一些空格/制表符,這在解碼文件中生成了一個換行符:S

無論如何,謝謝大家試圖幫助我:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM