首页 > 解决方案 > 以 PDF 格式从数据库加载缓冲区数据

问题描述

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

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

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

#pdf_box 标识符是指 HTML 文件中用于显示 PDF 的对象元素(当我将虚拟 PDF 文件的文件位置提供给该元素的数据属性时,这已显示有效)。

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

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

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

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

标签: javascripthtmlnode.jspdf

解决方案


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

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

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

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

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

推荐阅读