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

  • 相关阅读:
    计时器C#
    MySQL Database Command Line Client
    C#小爬虫,通过URL进行模拟发送接收数据
    C#导入导出Excele数据
    正则表达式动态分隔符
    C#中的枚举
    C#中的ToString格式大全
    C# 序列化与反序列化
    C# 对xml进行操作
    时间标签DateTime
  • 原文地址:https://www.cnblogs.com/leejay6567/p/9865476.html
Copyright © 2011-2022 走看看