2011-12-19 127 views
11

我想基地64編碼上傳的文件,然後將其保存到MySQL數據庫中的表格的Blob類型列。Base64編碼上傳文件,然後保存在數據庫

我已經嘗試使用文件變量在PHP函數base64_encode中構建,但這似乎不起作用。

有沒有辦法可以做到這一點?

原因是我不想使用moveuploaded文件到文件夾中。

謝謝。

+1

您不必將其存儲在一個blob之前BASE64_ENCODE文件。 – Sjoerd 2011-12-19 09:35:07

+0

那麼你如何在一張桌子上保存? – 2011-12-19 09:36:20

+1

您可以簡單地將文件數據插入blob字段。 – Arfeen 2011-12-19 09:41:00

回答

19

由於@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); 
+0

問題,戴夫 - 你說原始的二進制數據可以直接存儲在BLOB字段中,而不使用base64_encode。但是這不容易注射嗎?如果您使用mysql_real_escape_string,它似乎(不可逆轉地)損壞某些常見的文件類型,如PDF。到目前爲止,我的印象是,base64_encode是唯一的方法來逃避文件,並保留確切的內容......? – 2013-07-31 18:04:06

+0

to @TopherHunt:使用準備好的語句。那麼一切都是安全的! – JDuarteDJ 2015-09-25 09:50:45

相關問題