如何将文件下载到 Node.js 中的缓冲区中?

And*_*osa 6 javascript ajax node.js

我正在构建一个 Node 包,需要根据 url 下载一些文件。但是,我不想将它们直接保存到文件系统中。相反,我需要在保存到磁盘之前对它们进行预处理。因此,我想将文件内容保存在缓冲区中。这怎么能用 pipe() 完成?

当然,我可以保存一个临时文件,然后打开该文件,处理它并保存结果,但这会给磁盘带来不必要的读/写。

这些文件通常很小,并且是 .txt 或 .zip 文件,因此将它们保存在内存中不会带来任何危害。

目标之一是当下载的文件是 .zip 时,仅查找和提取伪装的文件。使用 Adm-Zip 我可以做到这一点,但必须传递一个缓冲区。

事先谢谢你。

Vla*_*eev 8

https.get(url, (res) => {
  const data = [];
  res.on('data', (chunk) => {
    data.push(chunk);
  }).on('end', () => {
    let buffer = Buffer.concat(data);
    // Do something with the buffer
  });
}).on('error', (err) => {
  console.log('download error:', err);
});
Run Code Online (Sandbox Code Playgroud)


Oli*_*dov 7

您可以使用节点获取库。存储库自述文件中的代码示例:

// if you prefer to cache binary data in full, use arrayBuffer()

fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png')
    .then(res => res.arrayBuffer())
    .then(buffer => { /* do whatever you want with buffer */ })
Run Code Online (Sandbox Code Playgroud)

  • 更新 - 2022 `res.buffer()` 已弃用,请改用 `res.arrayBuffer()`。 (3认同)