2011-12-19 174 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

相关问题