【问题标题】:fileReader.readAsArrayBuffer() equivalent method in Node.js?Node.js 中的 fileReader.readAsArrayBuffer() 等效方法?
【发布时间】:2021-07-30 16:26:47
【问题描述】:

我有一个File 对象,我想将它传递给PDF.jsgetDocument 方法。在前端,我会像这样使用getDocument 方法:

pdfjs.getDocument(fileReader.readAsArrayBuffer(myFileHere))

如何使用Node.js 实现上述功能?我也在使用Express.jsMulter

【问题讨论】:

  • 你确定 PDF.js 甚至可以在 Node 中工作吗?

标签: node.js express filereader multer pdfjs


【解决方案1】:

我不知道 PDF.js 是否能够在 Node 上运行,但我们假设它是。

至少使用 Node 中可用的 readFile(或 readFileSync,如果您希望“立即”获取内容)过程,文件可以读入 Buffer 对象,给定文件的路径。

如果您查看上面链接的Buffer 的文档,您还会发现这些是UInt8Array 的实例:

Buffer 类是 JavaScript 的 Uint8Array 类的子类,并使用涵盖其他用例的方法对其进行了扩展。

更进一步,UInt8Array 类的对象,也是TypedArray 类的对象(通过指定前者的相同规范)has a property named buffer,它允许您访问底层缓冲区1 那是...ArrayBuffer

因此,您应该能够轻松地使用以下变体,将带有某些文件内容的 ArrayBuffer 传递给 PDF.js:

pdfjs.getDocument(require("fs").readFileSync("/path/to/file").buffer);

我必须假设你必须通过路径读取文件——我假设你的 fileReaderFileReader,它(与其误导性名称相反)读取 Blob 对象(而不是文件)——并且 Node 没有定义任何 Blob 类! 因此,如果您不想通过某个路径读取文件,那么您必须告诉我们您是如何使用 Node 加载文件内容的。

1不要怪我这里到处都是“缓冲区”这个词,显然,它一直是缓冲区——我没有设计任何这些类;)

【讨论】:

  • 感谢您提供如此全面的解释。我正在使用 express 的 multer 中间件来接收表单的 PDF 文件。我假设 multer 传递的文件对象与上传的文件/Blob 对象相同(如在前端)。不幸的是发现不支持 blob,因为我想在继续使用 multer 存储它之前用 pdfjs 阅读它。无论如何,我会更深入地研究如何处理它。非常感谢!
  • 我发现了一个显然可以完成此任务的 npm 包。 npmjs.com/package/filereader
  • 我看不出你找到的那个包将如何以任何方式帮助你解决你的问题——如果 PDF.js 在 Node 中工作,你只需要传递一些文件的内容,就像我在上面的回答中解释的那样。该包只是将读取的内容抽象到 FileReader API 中,您可以使用 Node 提供的 readFile 读取相同的文件。最终,PDF.js 是否可以在 Node 上运行,这将取决于它本身。是否使用 Express.js 也无关紧要——因为它不能帮助您解决问题本身。无论如何,祝你好运!
  • 我重新阅读了您的问题,您似乎想在通过 Web 浏览器上传的文件上使用 getDocument(在后端),对吗?
猜你喜欢
  • 2011-10-12
  • 2016-08-23
  • 2012-02-05
  • 2018-10-31
  • 2022-01-14
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多