【发布时间】:2018-06-06 06:11:27
【问题描述】:
我正在尝试从我从 pdfmake 创建的 pdf 创建一个 blob,以便我可以将它发送到仅处理 blob 的远程 api。
这就是我获取 PDF 文件的方式:
var docDefinition = { content: 'This is an sample PDF printed with pdfMake' };
pdfDoc.pipe(fs.createWriteStream('./pdfs/test.pdf'));
pdfDoc.end();
以上代码行确实生成了可读的 pdf。
现在我怎样才能从那里得到一个 blob?我尝试了很多选项(使用 blob-stream 模块从流创建 blob,使用 fs 从文件创建,使用 b64toBlob 从 base64 字符串创建它)但所有这些都需要在某些时候使用构造函数 Blob即使我需要模块 blob,我总是会收到错误:
TypeError: Blob is not a constructor
经过一番研究,我发现 Blob 构造函数似乎只支持客户端。
我发现并且似乎处理这个问题的所有 npm 包似乎只在客户端工作:blob-stream、blob、blob-util、b64toBlob 等。
那么,如何在 Node 上创建 blob 服务器端?
我不明白为什么几乎没有人也需要创建 blob 服务器端?我能找到的关于这个主题的唯一线程是this one。
根据那个帖子,显然:
解决这个问题的方法是创建一个可以在 Array Buffers 和 Node Buffers 之间转换的函数。 :)
不幸的是,这对我没有多大帮助,因为我显然似乎缺乏一些重要的知识来理解这一点。
【问题讨论】:
-
一般来说:Blob 是一个描述二进制对象的抽象概念,如果你愿意的话,它是一个本地包装器。您不能真正发送“blob”,因为它在访问网络时基本上只是一个二进制/字节流(这就是为什么您实际上不需要服务器上的 Blob)。只需将数据作为二进制流从服务器发送 - 客户端应该能够以 ArrayBuffer 的形式接收(通过 XMLHttpRequest 或 fetch)或将后者转换为 Blob。
-
不是构造函数,但消息来源说它应该可以工作。 npmjs.com/package/blob