繁体   English   中英

从数据库加载缓冲区数据为 PDF

[英]Loading buffer data from database as PDF

我一直在开发 web 应用程序,用户可以在其中上传 PDF 文件,然后稍后检索并查看它。 为了实现这一点,我一直在做的是将 PDF 作为 bytea 数据类型(该列称为“附件”)上传到 PostgreSQL 数据库,然后让 nodeJS 提供这些数据以取回并转回 ZBCD1B6861776B5A8DFC 到 viewFAD1 .

但是我一直在努力将数据转换回有效的 PDF。 这是我目前使用的方法。

var file = new Blob([res[i].attachment], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
document.getElementById("pdf_box").data = fileURL;

The #pdf_box identifier refers to an object element in a HTML file which is used to display the PDF (this has been shown to work when I provide the file location of a dummy PDF file to the data attribute of this element).

res[i].attachment 还显示以 JSON 格式提供有效的缓冲区数据,下面提供了一个示例:

"attachment":{"type":"Buffer","data":[91,111,98,106,101,99,116,32,70,105,108,101,93]}

但是,当我将创建的 fileURL 加载到 #pdf_box 的数据属性中时,我收到一条错误消息,指示无效 PDF 文件的行。 到目前为止,我的研究似乎表明这可能是因为数据是以缓冲区的形式进入的,而它需要以字节的形式出现,但我没有发现太多可以帮助我了解如何实现这一点的方法,或者是否有办法在 forms 与我可以访问的数据之间进行转换? 我还看到偶尔提到一个名为 pdf.create() 的方法,但我找不到这方面的文档,我认为它必须属于 JS 的第三方库。

如果您知道任何可以帮助我了解我的问题是什么以及搜索什么以找出解决方案的信息,我们将不胜感激,谢谢。

对于所有阅读此问题的人来说,这种方法似乎是不可能的,并且实施起来可能效率极低。 如果您向 nodeJS 发送的字符串大于与此服务器的链接的 MTU(介于 68 字节和 >1500 字节之间,具体取决于网络的每个组件),则数据包将被静默丢弃,不会尝试解决或抛出错误。 您必须做的是采用“multipart/form-data”编码的方法将任何文件发送到服务器(更多信息请参见此处)。

还需要说明的是,不建议以任何容量将文件上传到数据库(由于数据库对于大量数据的存储效率很低),应该做的是上传文件路径或URL的引用来查找文件在。 然后在客户端,当您检索文件位置时,可以这样呈现该文件......

<object id="pdf" data="../files/test.pdf"></object>

要更改数据属性,可以执行以下操作...

document.getElementById("pdf").data = "../files/test2.pdf";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM