zoukankan      html  css  js  c++  java
  • Electron实现文件的下载和断点续下载功能

    前一章我们实现了大文件的上传功能,本章我们介绍在Electron中实现文件的下载和断点下载功能。这里下载的实现的方法较简单,采用流式下载的方案。

    这里我们通过request库来实现下载。

    downloadFile(fileInfo, downloadPath){
        var received_bytes = 0;//已经接收到的集结
        var total_bytes = item.fileInfo;//总字节
        let path = this.downloadPath+'/'+fileInfo.name; //确定文件下载的本地位置
        try{
                let stats = fs.statSync(path);//如果文件已存在读取文件信息
                if(total_bytes == stats.size){//如果文件已经存在并且已经下载按成则跳过该文件
                    return;
                }
                received_bytes = stats.size;
          }catch (err){
    
          }
    let params =
    {
    "method": 'GET',
    "url": ''
    }
    if(received_bytes>0){
                  params.headers['Range'] = 'bytes='+received_bytes;
            }
          var req = request({
               "method": 'GET',
               "url": ''
          });
           var out = fs.createWriteStream(path);//创建文件写入
           req.pipe(out);
           req.on('response', ( data ) => { 
                startTime = new Date().getTime();
            });
           //接收到文件流事件
           req.on('data', (chunk) => {
                received_bytes += chunk.length;
           })
          //文件接收结束
           req.on('end', () => {
                console.log(`file ${item.name} download complete`)
                if(received_bytes >= total_bytes){
                    this.dataset.splice(index, 1);
                }
            });
    }        

    这里在每次开始接受字节流时,首先判断该文件是否存在,若存在计算该文件接受的字节流大小,放在header中 Range:bytes=<文件的断点位置>-,这样会继续断点的位置继续下载。

  • 相关阅读:
    单链表
    队列

    面向对象的数组与查找算法
    线性结构
    数据结构与算法概述
    webstorm 格式化代码快捷键
    Web规范小记录1:Web文件规范
    豆瓣 API报错 ( "code":104 问题 )
    舔狗日记二之心灵日记(H5版本)
  • 原文地址:https://www.cnblogs.com/leejay6567/p/9865476.html
Copyright © 2011-2022 走看看