在 PHP Mysql 中下载完整大小的文件

Download Full size of File in PHP Mysql

我在使用 php.

从 MYSQL 下载 Blob 文件 时遇到问题

这是我在下载文件中的php脚本

        $querysel = "Select * from file where file_id = '$fileid'";
        $resultsel = mysql_query($querysel);
        $rowsel = mysql_fetch_array($resultsel);

        $filename = $rowsel['file_name'];
        $mimetype = $rowsel['mime_type'];
        $filesize = $rowsel['file_size'];

        header("Content-length: ".$filesize);
        header("Content-type: ".$mimetype);
        header("Content-disposition: attachment; filename=".$filename);
        header("Content-Description: PHP Generated Data");
        header("Content-transfer-encoding: binary");
        echo $filename;

mysql中的table:

问题 [已更新]

  1. 这里的问题似乎是下载文件后,该特定文件的文件大小与 mysql 中保存的文件大小不匹配。不知道为什么?

  2. 我也遇到了这个小问题,我下载了powerpoint删除后重新下载会自动保存到下载,会自动打开。正常吗?

示例:

文件大小为 6.8MB 的 BLOB 文件本应以 6.8MB 下载,但此处发生的情况是下载文件的文件大小仅为 25 字节。为什么?

如有任何帮助,我们将不胜感激。谢谢

在我看来你想要回显文件内容而不是它的文件名

    $querysel = "Select * from file where file_id = '$fileid'";
    $resultsel = mysql_query($querysel);
    $rowsel = mysql_fetch_array($resultsel);

    $filename = $rowsel['file_name'];
    $mimetype = $rowsel['mime_type'];
    $filesize = $rowsel['file_size'];

    header("Content-length: ".$filesize);
    header("Content-type: ".$mimetype);
    header("Content-disposition: attachment; filename=".$filename);
    header("Content-Description: PHP Generated Data");
    header("Content-transfer-encoding: binary");

    echo $rowsel['file_content'];          //<-- changed line

当然,对于较大的文件,您可能仍然存在问题,因为 BLOB 不足以容纳 6.8 Meg。请参阅@Fred-ii- 评论以了解详细信息以及您需要检查的所有相关信息的链接。

即使是 LONGBLOB 也只有 4,294,967,295 字节,也就是 4Gig 多一点,因此您可能需要在存储到 LONGBLOB 之前进行一些大小检查。

最安全的建议是将实际文件存储在磁盘上,并且只将文件名和路径存储在数据库中。