我想基地64編碼上傳的文件,然後將其保存到MySQL數據庫中的表格的Blob類型列。Base64編碼上傳文件,然後保存在數據庫
我已經嘗試使用文件變量在PHP函數base64_encode中構建,但這似乎不起作用。
有沒有辦法可以做到這一點?
原因是我不想使用moveuploaded文件到文件夾中。
謝謝。
我想基地64編碼上傳的文件,然後將其保存到MySQL數據庫中的表格的Blob類型列。Base64編碼上傳文件,然後保存在數據庫
我已經嘗試使用文件變量在PHP函數base64_encode中構建,但這似乎不起作用。
有沒有辦法可以做到這一點?
原因是我不想使用moveuploaded文件到文件夾中。
謝謝。
由於@Sjoerd和@zerkms正確指出,您不需要這樣做 - blob列將用於存儲原始二進制數據,因此您可以繞過Base64進程並插入文件的原始數據。
如果要將圖像存儲在數據庫中(順便說一句,我個人不喜歡這樣做),最好存儲原始數據 - Base64對數據進行編碼使其變大,並且意味着它必須在圖像呈現之前解碼,這會增加處理開銷。
這是你可以插入原始二進制數據(假設MySQL擴展):
$data = file_get_contents($_FILES['name_of_control']['tmp_name']);
$data = mysql_real_escape_string($data);
$query = "
INSERT INTO table
(`blob_column`)
VALUES
('$data')
";
mysql_query($query);
如果你確實想爲Base64編碼它(在這種情況下,它可能只是被存儲在一個varchar) ,纔剛剛加入base64_encode()
電話:
$data = file_get_contents($_FILES['name_of_control']['tmp_name']);
$data = base64_encode($data);
// There is an argument that this is unnecessary with base64 encoded data, but
// better safe than sorry :)
$data = mysql_real_escape_string($data);
$query = "
INSERT INTO table
(`varchar_column`)
VALUES
('$data')
";
mysql_query($query);
問題,戴夫 - 你說原始的二進制數據可以直接存儲在BLOB字段中,而不使用base64_encode。但是這不容易注射嗎?如果您使用mysql_real_escape_string,它似乎(不可逆轉地)損壞某些常見的文件類型,如PDF。到目前爲止,我的印象是,base64_encode是唯一的方法來逃避文件,並保留確切的內容......? – 2013-07-31 18:04:06
to @TopherHunt:使用準備好的語句。那麼一切都是安全的! – JDuarteDJ 2015-09-25 09:50:45
您不必將其存儲在一個blob之前BASE64_ENCODE文件。 – Sjoerd 2011-12-19 09:35:07
那麼你如何在一張桌子上保存? – 2011-12-19 09:36:20
您可以簡單地將文件數據插入blob字段。 – Arfeen 2011-12-19 09:41:00