我开发了一个系统,可以将电子邮件解析并存储到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)。
我进行了调试,但是当我从DB中获取数据BLOB时--在本例中--最后一个元素=pdf-文件没有返回。只有前面的图像文件。
当我硬编码数据并尝试我的代码时,它完美地工作。数据也不会被截断。
好像这不是记忆问题
如果有人能给我个提示..。?
事先非常感谢
发布于 2019-03-30 06:46:14
正如@Shadow所提到的:
Mediumblob仅为16 is。Base64极大地增加了数据的大小,所以即使原始二进制大小小于16 if,也可能存在一些数据截断。请包括从数据库存储和检索文件的代码。
我将字段修改为LONGBLOB,现在它似乎工作得很好!:-)
发布于 2019-03-29 13:40:15
将大数据存储在数据库中是个坏主意,因为大多数情况下,它会使您的服务器变慢。相反,您可以通过php脚本将pdf复制到文件夹中,然后将它的引用存储在sql数据库中。
现在您可以轻松地从数据库中读取您的pdf内容。
或者你可以检查这个
https://stackoverflow.com/questions/55418113
复制相似问题