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

10
我正在编写一个Node包,需要根据给定的URL下载一些文件。然而,我不想直接将它们保存到文件系统中。相反,我需要在保存到磁盘之前进行预处理。因此,我想将文件内容保存在缓冲区中。如何使用pipe()实现这一点?
当然,我可以保存一个临时文件,然后打开文件,处理它并保存结果,但这会带来不必要的磁盘读写。
这些文件通常很小,是.txt或.zip文件,所以将它们保存在内存中不会有任何危害。
其中一个目标是在下载的文件为.zip时,仅查找和提取所需的文件。使用Adm-Zip,我可以做到这一点,但必须传递一个缓冲区。
提前感谢您。

可能需要安装另一个包,例如 request。使用该库启动下载,然后查看是否可以将响应主体包含在 Buffer 对象中。 - ionizer
2个回答

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);
});

7
你可以使用node-fetch 库。以下是来自存储库自述文件的代码示例:
// if you prefer to cache binary data in full, use buffer()
// note that buffer() is a node-fetch only API

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

3
更新 - 2022 res.buffer()已被弃用,请改用res.arrayBuffer() - Bharat D Bhadresha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接