Base64编码上传文件,然后保存在数据库中

时间:2011-12-19 09:33:43

标签: php

我想基于64个编码上传文件,然后将其保存到MySQL数据库中表的Blob类型列中。

我已经尝试使用文件变量内置PHP函数base64_encode,但这似乎不起作用。

我们有办法做到这一点吗?

原因是我不想将moveuploaded文件用于文件夹。

谢谢。

1 个答案:

答案 0 :(得分:20)

正如@Sjoerd和@zerkms正确指出的那样,您不需要这样做 - blob列用于存储原始二进制数据,因此您可以绕过Base64进程并插入文件的原始数据。 / p>

如果你想将图像存储在数据库中(顺便说一句,我个人不喜欢这样做),最好存储原始数据 - 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);