【问题标题】:How to retrieve original pdf stored as MySQL mediumblob?如何检索存储为 MySQL mediumblob 的原始 pdf?
【发布时间】:2022-01-13 15:09:06
【问题描述】:

一个包含近四千条记录的表包括一个 mediumblob 字段,每个记录包含该记录的关联 PDF 报告。在 MySQL Workbench 和 phpMyAdmin 下,相关的 DOCUMENT 列将数据显示为 BLOB 按钮或链接。在 phpMyAdmin 的情况下,该链接还指示 Blob 包含的数据的大小。

问题是,当单击 Blob 按钮/链接时,在 MySQL Workbench 下使用 SQL 编辑器打开任何文件仅显示原始 Blob 数据,而在 phpMyAdmin 下,该链接仅允许将 Blob 数据保存为 . bin 文件,而不是将数据显示或保存为可查看的 PDF 文件。以前使用 PHP 检索原始 PDF 的所有尝试都失败了 - 请参阅相关的早期线程:Extract Pdf from MySql Dump Saved as Text

表格中的文件名字段显示所有存储的文件都是 PDF 文件。进一步的研究和测试表明,mediumblob 数据已存储为 application/octet-streams。

我的问题是如何将原始 PDF 检索为可读 PDF?从数据库保存的.bin文件是否可以转换或用于恢复原始PDF文件?

任何帮助将不胜感激。

【问题讨论】:

  • 尝试将 bin 重命名为 pdf,但我不抱希望,您是如何将数据插入数据库的?
  • @K J:谢谢你的回复。我已经从 cmd 行对 PDF 文件进行了测试编码和解码,并且可以确认 base64 编码文件的文本确实与 JVBER 有关系...该文件还解码回可读的 PDF。我开始怀疑这些文件是否作为电子邮件附件添加到数据库中,而 mediumblob 可能包括所有额外的开销。
  • @nbk:将文件扩展名从 .bin 更改为 .pdf 不允许打开文件。 Adobe Reader 只是拆分出以下错误:“Adobe Acrobat Reader 无法打开‘application.pdf’,因为它不是受支持的文件类型或文件已损坏(例如,它是作为电子邮件附件发送的,但'未正确解码)。”我没有插入数据。我正在尝试从过去提供的备份中恢复文件。
  • @K J:再次感谢您的反馈。相关数据本身只能追溯到 2017 年,所以没有那么旧。我曾假设 blob 将包含以通用格式编码的数据。我还试图联系其中一位软件开发人员,看看他/她是否能够阐明数据是如何编码的。

标签: mysql pdf phpmyadmin blob mysql-workbench


【解决方案1】:

根据我的假设和 Isaac 的建议,唯一的解决方案是能够与其中一位软件开发人员交谈。事实证明,这些文档已经使用第三方库进行了压缩,并且在存储到数据库之前已删除了标题。 使用的第三方库是 Chilkat 的 2.0.50727 版本,可从www.chilkatsoft.com 获得。该版本似乎不再可用,但希望至少有一个更高版本可以完成这项工作。 再次感谢大家的意见和帮助。

【讨论】:

  • @KJ:可能我在上面的反馈中没有解释清楚。有人解释说,在压缩文件之前先剥离文件头,然后将结果数据添加到数据库 mediumblob 字段中。这就是为什么线开始不是恒定的。希望对您有所帮助。
【解决方案2】:

根据 cmets 中的讨论,听起来您需要参考原始源代码或咨询原始开发人员以确定数据的确切存储方式。

使用 phpMyAdmin 将 mediumblob 数据下载为文件在很多情况下会下载 .bin 文件,我实际上不记得它是如何确定内容类型的(例如,PNG 文件将下载扩展名为 .png 的文件,但是当 phpMyAdmin 不确定扩展名应该是什么时,大多数其他二进制文件只是作为 .bin 下载,包括 PDF)。因此,您从 phpMyAdmin 看到的行为是预期的并且是正确的,但是由于 .bin 文件在重命名为 .pdf 时不起作用,这意味着导入和上传可能出现问题。

BLOB 数据通常以非常标准化的方式存储,但您的数据似乎不遵循该方法。

如果我们没有直接看到代码,我们无法猜测存储数据到底发生了什么,只能猜测。

【讨论】:

  • 感谢您的回复,艾萨克。我已经联系了开发商,但到目前为止没有收到任何回复。除非使用某种晦涩的方法从插入数据库的文件中去除文件类型,否则这不是好兆头。因为看起来每个 mediumblob 字段都包含不可读的数据。似乎没有包含文件类型信息。
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
相关资源
最近更新 更多