0

我将我的 sql 数据库中的文件内容保存为 longblob:

  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;
}
4

2 回答 2

0
  1. 在输出图像数据之前不要输出任何数据(如链接)。其他任何东西都会破坏图像。
  2. 不要在任何内容已经显示后输出标题。由于 HTTP 的性质,一旦输出开始,您就无法修改或添加标头。这就是为什么没有显示内容类型标题并且您将所有内容都视为 HTML 的原因。
于 2013-04-21T14:55:56.693 回答
0

如果你得到一个包含代码的文件,你需要检查你的 LAMP 设置。至于您的代码,请尝试删除 flush();

于 2013-04-21T12:33:38.280 回答