【问题标题】:How to store a PDF file in MySQL database?如何在 MySQL 数据库中存储 PDF 文件?
【发布时间】:2011-04-16 16:35:53
【问题描述】:

如何使用 PHP 将 PDF 文件存储在 MySQL 数据库中?

【问题讨论】:

  • 因为我们不允许为用户上传 pdf..所以我们想将 pdf 存储在 db..我对此一无所知...

标签: php mysql binaryfiles


【解决方案1】:

使用 BLOB(二进制大对象)(longblob 数据类型)

$fileHandle = fopen($fileUpload, "r");
$fileContent = fread($fileHandle, $fileUpload_size);
$fileContent = addslashes($fileContent);
$dbQuery = "INSERT INTO myBlobs VALUES ";
$dbQuery .= "('$fileContent')";

完整教程可用here

但强烈建议将文件存储在文件系统上,只需在数据库中添加一个引用(包含文件路径和名称的字段)。几个原因:

  • 更快
  • 更容易访问(不需要任何特殊应用程序)
  • 更快的备份
  • 空间更小

【讨论】:

  • "..但强烈建议将文件存储在文件系统上..." 有点误导,因为这肯定不是普遍持有的立场。实际上,Bill Karwin 在他的精彩著作“SQL Antipatterns”中将其标记为反模式。应根据具体情况评估是否应将文件数据存储在 DB 或 FS 中。
【解决方案2】:

使用类型BLOB

这是example in PHP

【讨论】:

    【解决方案3】:

    正如其他人提到的,您可以使用 BLOB 类型。

    另外,您还可以将 PDF 保存在文件系统中,并将其相关链接保存到数据库中。这与保存诸如缩略图和其他数据类型之类的内容相同的原则,这些内容可能对用户来说是唯一的并且在资源方面很昂贵。

    【讨论】:

      【解决方案4】:

      如果您只是想将上传的 PDF 文件存储在您的服务器上,更常见的做法是将该文件复制到具有唯一文件名的给定目录,然后将该文件的完整路径存储在您的 MySQL 表中。

      如果您确实希望将文件的完整二进制数据存储在 MySQL 数据库中,那么您将需要做更多的工作来将二进制数据放入 MySQL 中的 BLOB 字段,然后将其转回以后再拉出来的文件。

      您可能不仅要在 MySQL 表中存储文件的二进制数据,还要存储文件名、文件类型,甚至可能是文件的大小(用于在您的网页上列出)。您可能会想要一个表格,例如:

      CREATE TABLE files (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        filename VARCHAR(128) NOT NULL,
        mimetype VARCHAR(64) NOT NULL,
        data MEDIUMBLOB NOT NULL
      );
      

      在你的 PHP 中,你可以插入一个上传的文件,如下所示;

      $filePointer = fopen($_FILES['fileUpload']['tmp_name'], 'r');
      $fileData = fread($filePointer, filesize($_FILES['fileUpload']['tmp_name']));
      $fileData = addslashes($fileData);
      $sql = "INSERT INTO files (filename, mimetype, data) VALUES( $fileName, $fileType, $fileData )";
      

      再次取出文件需要一个专用脚本,该脚本选择适当的文件,然后使用一系列“标题”命令将该文件以浏览器知道如何处理的形式推送回浏览器.

      您可以阅读有关此here 的完整教程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多