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=<文件的断点位置>-,这样会继续断点的位置继续下载。

posted @ 2018-10-29 13:33  leejay-blog  阅读(7975)  评论(2编辑  收藏  举报