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=<文件的斷點位置>-,這樣會繼續斷點的位置繼續下載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM