如何使用PHP检索/下载存储在MySQL数据库中的BLOB中的文件

时间:2016-01-27 18:12:44

标签: php mysql

前几天我最近写了一个程序,它接受用户提供的文件,并将实际文件(驱动程序)插入到MySQL数据库BLOB中。插入如下:

$sql = "INSERT INTO Drivers (driver, filename, status, version, environments) VALUES(LOAD_FILE('$driver'), '$filename', $statusid, $driver_version, '$environments')";

正如您在上面所看到的,'驱动程序'字段是BLOB。我在不同的领域也有文件名。所以问题是,如何轻松获取BLOB并将其放回实际文件中?我需要将其放入一个文件中,以便我可以通过SCP将其上传到服务器。我已经看到了一些带有内容标题等的示例,它们看起来都太复杂了。用LOAD_FILE()很容易加载,我也不知道是否还有另一个简单的选项可以将它恢复到实际文件中?对不起,我没有任何代码示例。我真的不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

你的sql表至少应该有两个额外的字段:

`mime_type` varchar(255) NOT NULL,
`size` int(10) unsigned NOT NULL,

其中:

  • mime_type是mime_content_type($path)
  • size是文件的大小 以字节为单位,filesize($path)

和PHP代码应如下所示:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: {$file['mime_type']}");
header("Content-Transfer-Encoding: binary");
header("Content-Length: {$file['size']}");
header("Content-disposition: inline; filename= {$file['filename']}");

return $file['driver'];

在SQL中将数据存储为二进制文件的原因由业务规则决定。例如,我存储了必须保持私密的合同。