【问题标题】:read pdf content from BLOB in MySQL从 MySQL 中的 BLOB 读取 pdf 内容
【发布时间】:2019-08-20 10:26:24
【问题描述】:

我开发了一个系统,可以解析电子邮件并将其存储到 MySQL 数据库中。 我将附件作为 JSON 中的对象数组保存到 MEDIUMBLOB 字段中。 一切都几乎按预期工作。至少在保存时。 当我尝试阅读附件时,我只取回图像,而不是 pdf 文件。

BLOB 具有以下“虚拟”内容:

[
{
"filename":"img1.png", "ext":"png", "type": "image/png", "size":4096, 
"dispo":"inline", "cid":"123@abc", "content":"base64_encoded binary- 
data"
},
{
"filename":"pdf1.pdf", "ext":"pdf", "type": "application/pdf", 
"size":4096, "dispo":"attachment", "cid":null, 
"content":"base64_encoded binary-data"
}
]

附件是这样写的: json_encode($attachmentsDB,JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)。

我进行了调试,但不知何故,当我从数据库中获取数据 BLOB 时 - 在这种情况下 - 最后一个元素 = 不返回 pdf 文件。只有前面的图片文件。

当我对数据进行硬编码并尝试我的代码时,它可以完美运行。 数据也不会被截断。

看来不是内存问题

如果有人可以给我一个提示请...?

在此先感谢

【问题讨论】:

  • Mediumblob 最多只有 16MB。 Base64 极大地增加了数据的大小,因此即使原始二进制大小低于 16MB,也可能会出现一些数据截断。请包括从数据库中存储和检索文件的代码。
  • @Shadow:好的,谢谢,我会检查这种可能性。当我下载 BLOB.bin 时,一切都很好。

标签: php mysql pdf blob


【解决方案1】:

在数据库中存储大数据是个坏主意,因为大多数情况下它会使您的服务器变慢。 相反,您可以通过 php 脚本将您的 pdf 复制到一个文件夹中,然后将其引用存储在 sql 数据库中...

现在您可以轻松地从数据库中读取您的 pdf 内容..

或者你可以检查一下

PHP: Upload a Pdf to SQL Database

【讨论】:

  • 这不是问题。它是运行 Percona 的专用 VPS 4 核、8GB RAM。在我将文件保存在 FS 中并在 DB 中引用之前,但是服务器填得太快并且性能很糟糕。
【解决方案2】:

正如@Shadow 所说:

Mediumblob 最多只有 16MB。 Base64 极大地增加了数据的大小,因此即使原始二进制大小低于 16MB,也可能会出现一些数据截断。请包含存储和从数据库中检索文件的代码。

我将字段修改为 LONGBLOB,现在它似乎可以正常工作了! :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 2019-01-28
    • 2023-03-31
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多