2013-04-21 172 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。