【问题标题】:How to download a file into a Buffer in Node.js?如何在 Node.js 中将文件下载到缓冲区中?
【发布时间】:2019-01-08 04:05:08
【问题描述】:

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

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

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

其中一个目标是在下载的文件是 .zip 时仅查找并提取假冒的文件。使用 Adm-Zip 我可以做到这一点,但必须传递一个缓冲区。

事先谢谢你。

【问题讨论】:

  • 可能需要安装另一个包,比如request。使用库启动下载,然后查看是否可以将响应正文包含在 Buffer 对象中

标签: javascript node.js ajax


【解决方案1】:
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);
});

【讨论】:

    【解决方案2】:

    您可以使用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 */ })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2015-08-10
      • 2023-04-06
      • 2021-11-17
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多