前几天我最近写了一个程序,它接受用户提供的文件,并将实际文件(驱动程序)插入到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()很容易加载,我也不知道是否还有另一个简单的选项可以将它恢复到实际文件中?对不起,我没有任何代码示例。我真的不知道从哪里开始。
答案 0 :(得分:0)
你的sql表至少应该有两个额外的字段:
`mime_type` varchar(255) NOT NULL,
`size` int(10) unsigned NOT NULL,
其中:
mime_content_type($path)
和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中将数据存储为二进制文件的原因由业务规则决定。例如,我存储了必须保持私密的合同。