我想基地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