簡體   English   中英

如何使用PHP檢索/下載MySQL數據庫中BLOB中存儲的文件

[英]How to retrieve/download a file stored in a BLOB in a MySQL DB using PHP

前幾天,我最近寫了一個程序,該程序接收用戶提供的文件,並將實際文件(驅動程序)插入到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()加載很容易,我不知道是否還有另一個簡單的選項可以將其恢復為實際文件? 抱歉,我沒有任何代碼示例。 我真的不知道從哪里開始。

您的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中以二進制形式存儲數據的原因由業務規則規定。 例如,我存儲必須保密的合同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM