前一章咱們實現了大文件的上傳功能,本章咱們介紹在Electron中實現文件的下載和斷點下載功能。這裏下載的實現的方法較簡單,採用流式下載的方案。this
這裏咱們經過request庫來實現下載。url
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){
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=<文件的斷點位置>-,這樣會繼續斷點的位置繼續下載。spa