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

时间:2015-09-14 14:41:44

标签: php mysql file blob

使用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 enter image description here

问题 [已更新]

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

  2. 我也遇到了这个小问题,在我下载了Powerpoint并删除它并再次下载后会自动保存到下载中并自动打开。这是正常的吗?

  3. 示例:

    文件大小为6.8MB的BLOB文件应该以6.8MB的速度下载,但这里发生的是下载文件的文件大小只有 25bytes 。为什么呢?

    非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:2)

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

    $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兆。请参阅@ Fred-ii-评论以获取详细信息以及指向检查所需的所有相关信息的链接。

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

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