【问题标题】:Download Full size of File in PHP Mysql在 PHP Mysql 中下载完整大小的文件
【发布时间】:2015-12-10 14:56:58
【问题描述】:

我在使用 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中的这个表:

问题 [更新]

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

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

例子:

文件大小为 6.8MB 的 BLOB 文件应该也以 6.8MB 下载,但这里发生的情况是下载文件的文件大小仅为 25bytes。为什么?

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 我想你会发现“01 LCD Slides 1.pps”大约有 25 个字符。也许您想返回文件,而不是文件名?
  • 最后一行:echo $filename 不发送内容,只发送一个文件名(大概 25 字节长?)
  • P.S.通常建议您将文件上传到文件系统,而不是 数据库。您可以将文件名、路径和元数据存储在 db 中,但通常不建议将文件存储在 db 中。
  • BLOB 不够大,无法存储这么大的文件。 6.8 MiB dev.mysql.com/doc/refman/5.0/en/blob.html
  • 引用自stackoverflow.com/questions/5775571/… 中的答案 “BLOB 最多可以是 65535 字节。如果您需要更多,请考虑使用 MEDIUMBLOB 16777215 字节或 LONGBLOB 4294967295 字节。请参阅存储要求字符串类型了解更多信息。”

标签: php mysql file blob


【解决方案1】:

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

    $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 之前进行一些大小检查。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2012-06-15
    • 2019-01-20
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2019-06-10
    相关资源
    最近更新 更多