【发布时间】:2020-11-22 02:52:34
【问题描述】:
我一直在开发一个网络应用程序,用户可以在其中上传 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 的第三方库。
如果您知道任何可以帮助我了解我的问题是什么以及搜索什么以找出解决方案的信息,我们将不胜感激,谢谢。
【问题讨论】:
-
通常你不会将文件内容保存到数据库中(我可以上传 100 x 100Mb 的文件,你的数据库容量会大大减少)。您将文件上传到某个存储位置:CDN、AWS S3、保存在服务器上等。在数据库中,您只保存资源的 URL。在 UI 部分,您使用一些 PDF 查看器来显示来自 URL 的元素
-
此外,使用
<object id="pdf" data="../files/test.pdf" type="application/pdf"></object>似乎是我发现在您的应用程序中显示 PDF 而无需打开文件的最有效的本地方式。要动态调整它,您可以修改数据属性,例如document.getElementById("pdf").data = '../files/test2.pdf'。
标签: javascript html node.js pdf