构建一个中等复杂度的节点下载模块

building a node download module with moderate complexity

我正在为 Electron Node 应用程序构建一个下载模块,想尝试 node-fetch 并有几个问题。

  1. 如何获得总文件大小以便我可以执行进度?
  2. 如何pause/resume/cancel下载?

还有使用其他库的示例 except requestaxios 欢迎使用!谢谢!

这是我目前拥有的:

const fetch = require('node-fetch');
const fs = require('fs');

const url = 'https://images.pexels.com/photos/45201/kitty-cat-kitten-pet-45201.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940'

async function download() {
  const nfetch = await fetch(url);

  const fileStream = fs.createWriteStream('./octocat.png');
  nfetch.body.pipe(fileStream);

  nfetch.body.on("response", (data) => {
    console.log('response ???');
  });

  nfetch.body.on("data", (chunk) => {
    console.log(chunk.length);
  });

  nfetch.body.on("error", (err) => {
    console.log('err:', err)
  });

  fileStream.on("finish", function () {
    console.log('finish');
  });
}

download();
  1. nfetch.headers 包含 header 称为 Content-Length - 图片大小

  2. nfetch.body 是可读流 docs, 所以你可以使用这些方法:pause()resume()destroy()