Node.js 实时显示文件下载进度并支持取消下载

Nodejs功能模块:

简介如下:
https => 建立远程网络连接
request => 用来请求资源
progress => 实时获取下载进度
fs => 用来创建读写流
详情请查询Nodejs官网:http://nodejs.cn/api/http.html

代码如下:

/**
 * 将远程资源下载到指定目录
 * @param {String} fileName 文件名
 * @param {String} remoteUrl 远程路径
 * @param {String} outPutPath 本地输出路径
 * @param callback '() => {}';
 */
let downloadRequest = null;
export let _remoteFile2Local = (fileName, remoteUrl, outPutPath, callback) => {
  https.get(remoteUrl + fileName, (res) => {
    if (res.statusCode === 200) {
      res.setEncoding(null); // 设置编码
      let str = progress({
        length: res.headers['content-length'],
        time: 500 /* ms */
      });
      str.on('progress', function (progress) {
        console.log('percentage:', progress.percentage) // 下载进度
      });
      let url = remoteUrl + fileName; // 远程文件下载地址
      let globalRequest = request.get({url: url, encoding: null}, (err, requestRes, body) => {
        if (err) throw err
        callback && callback();
      });
      // 两个pip(通道) => 下载进度监控、存储到本地路径
      globalRequest.pipe(str).pipe(fs.createWriteStream(path.join(outPutPath, fileName)));
      downloadRequest = globalRequest; // 用于取消下载
    } else {
      console.log('远程地址出错:', res.statusMessage);
    }
  })
}

/**
 * 取消下載
 * @param callback '() => {}';
 */
export let _abortDownload2 = (callback) => {
  downloadRequest.abort(); // 停止网络请求
  // to do 删除本地已经下载的文件/夹
  callback && callback();
}
上一篇:java中间带T时间设置


下一篇:Java8 时间差计算