2013-04-21 51 views
0

我在SQL數據庫中保存的文件的內容LONGBLOB:如何使用PHP從SQL數據庫下載文件?

CREATE TABLE IF NOT EXISTS `upload` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(30) NOT NULL, 
`type` varchar(30) NOT NULL, 
`size` int(11) NOT NULL, 
`content` longblob NOT NULL, 
PRIMARY KEY (`id`) ); 

當我嘗試下載我得到的是內容寫的代碼。我想在點擊文件時創建「另存爲」選項。

這是我如何存儲數據:

$query = "INSERT INTO upload (name, size, type, content) ". 
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')"; 

這是我如何獲取數據:

if (isset($_GET['id'])) { 
    $con = mysql_connect('localhost', 'root', '') or die(mysql_error()); 
    $db = mysql_select_db('test', $con); 
    $id = $_GET['id']; 
    $query = "SELECT name, type, size, content " . "FROM upload WHERE id = '$id'"; 
    $result = mysql_query($query) or die('Error, query failed'); 
    list($name, $type, $size, $content) = mysql_fetch_array($result); 
    header("Content-length: $size"); 
    header("Content-type: $type"); 
    header("Content-Disposition: attachment; filename=$name"); 
    ob_clean(); 
    flush(); 
    echo $content; 
    mysql_close(); 
    exit; 
} 
+0

你的代碼應該可以正常工作(雖然我不確定你爲什麼要執行可能會中斷輸出的「flush」調用)。 「代碼正在返回」是什麼意思? – 2013-04-21 12:30:46

回答

0

,如果你得到一個包含代碼的文件,你需要檢查你的燈設置。至於你的代碼,請嘗試刪除flush();

0
  1. 在輸出圖像數據之前,不要輸出任何數據(如鏈接)。其他任何東西都會破壞圖像。
  2. 不顯示任何內容後不輸出標題。由於HTTP的性質,一旦輸出開始,您就不能修改或添加標頭。這就是爲什麼內容類型標題沒有顯示,並且您將所有內容看作HTML。
相關問題