Node断点下载

function downloadFile(url,savefile){

    //如果文件已存在,获取长度
	 var receivedBytes=0; 
	 if(fs.existsSync(savefile)){
		 var stats = fs.statSync(savefile);
		var receivedBytes=stats.size; 
		console.log("续传");
	 }
	 
	//发送请求时,增加一个range头
    var opts={
		headers:{'Range':`bytes=${receivedBytes}-`}
	}
	console.log(opts);
	var req = https.request(url,opts);
	 // 通过flag指定文件是新建还是追加
	var file = fs.createWriteStream(savefile,{
		start:receivedBytes,
		flags:receivedBytes>0?'a+':'w'
	});
    //收到请求的回复后
	req.on('response', function(res){
		var len = parseInt(res.headers['content-length'], 10);//当前内容总长度
		var rangelen = res.headers['content-range'];//获取内容的字节范围
        res.pipe(file);
		var bar = new ProgressBar(savefile+' downloading [:bar] :rate/bps :percent :etas', {
			complete: '=',
			incomplete: ' ',
			width: 20,
			total: len
		});
        //回复数据流收到数据,更新进度条
		res.on('data', function (chunk) {
			bar.tick(chunk.length);
		  });
        //回复数据流结束
		res.on('end', function () {
			console.log('\n');
		});

	})
	req.end();
}
发布了22 篇原创文章 · 获赞 4 · 访问量 4834

猜你喜欢

转载自blog.csdn.net/guo1wu3shi4/article/details/104228246
今日推荐