2010-07-01 166 views
4

我已將圖像作爲BLOB文件存儲在我的數據庫中。這可能不是最好的做法(我知道這一點)。我想在點擊時在頁面上創建一個鏈接,並提示用戶使用典型的保存文件提示,這樣他們就可以將文件保存在他們的個人磁盤上。將BLOB圖像從PHP中的數據庫保存到磁盤

我在網上進行了研究,但我所嘗試的似乎不工作,它只是將字節發佈到我的頁面而不是在文件中。我的代碼保存文件如下。我正在使用一個框架,所以數據庫事務和retrevial​​代碼可能看起來很奇怪,但值已正確設置。在存儲在數據庫中之前,這些文件也使用base64進行編碼,因此我調用解碼函數將其恢復到正常狀態。

function save_file($file_id) { 
    $result = $DB->get_file($file_id); 
    $size = $result->fields['size']; //1024 
    $mime = $result->fields['mime']; //image/jpg 
    $name = $result->fields['name']; //test.jpg 

    header("Content-Disposition:attachment;filename=".$name); 
    header("Content-Type=: ".$mime); 
    header("Content-Length: ".$size); 

    base64_decode(file); 
    echo($file); 
    exit(); 
} 

回答

6
function save_file($file_id, $target_folder) { 
    $result  = $DB->get_file($file_id); 
    $file_content = $result->fields['your_file_content_field']; 
    $name   = $result->fields['name']; 

    /* Decode only if the file contents base64 encoded 
    * before inserting to database. 
    */ 
    $file_content = base64_decode($file_content); 

    return file_put_contents($target_folder.'/'.$name, $file_content); 
} 
7

我想你的Content-Type頭是錯誤的。 =看起來像一個錯字。

+2

+1鷹眼.. – Cristian 2010-07-01 18:09:57

+1

哈哈。搞定了! – 2010-07-01 18:11:56