Node.js中实时显示下载进度并解压文件
2018-03-31 19:57
741 查看
在这个功能中,我使用了以下四个模块的一些方法,关于这四个模块的详情可以点击下方查阅:
request,用来请求资源
progress-stream,用来显示进度信息
unzip,用来解压缩
fs,用来创建读写流
该功能的流程是:
创建写入流 fs.createWriteStream
请求zip文件 request.get(options)
在request请求的回调函数中获取zip文件大小并设置length参数 length: response.headers['content-length']
设置好length参数之后再重新request请求zip文件(否则无法获取length参数,进度信息会有误)
将request请求到的文件流pipe进progress-stream的实例(proStream)中去监听zip文件下载进度 request.get(options).pipe(proStream)及proStream.on('progress', function(progress){...})
zip文件下载完成,触发zip文件的finish事件
解压缩
代码如下,
request,用来请求资源
progress-stream,用来显示进度信息
unzip,用来解压缩
fs,用来创建读写流
该功能的流程是:
创建写入流 fs.createWriteStream
请求zip文件 request.get(options)
在request请求的回调函数中获取zip文件大小并设置length参数 length: response.headers['content-length']
设置好length参数之后再重新request请求zip文件(否则无法获取length参数,进度信息会有误)
将request请求到的文件流pipe进progress-stream的实例(proStream)中去监听zip文件下载进度 request.get(options).pipe(proStream)及proStream.on('progress', function(progress){...})
zip文件下载完成,触发zip文件的finish事件
解压缩
代码如下,
var request = require('request'); var unzip = require('unzip'); var progress = require('progress-stream'); var fs = require('fs');
var tZip = fs.createWriteStream('./XXX.zip');/zip文件的写入流 var tExe = fs.createWriteStream('./XXX.exe');//解压之后的exe文件的写入流 var zipUrl = decodeURI(url);//zip文件的地址,防止连接中有中文字符出错使用decodeURI tZip.on('finish', () => { $("#update p").text("压缩下载完成,即将解压缩"); //解压文件 fs.createReadStream('./XXX.zip').pipe(unzip.Parse()).on('entry', function (entry) { console.log(entry); entry.pipe(tExe); }); }); tExe.on("finish",function (){ console.log("解压完成"); }) tZip.on('error', () => { console.error('error'); }); var options = { url:zipUrl, encoding:null//当请求的是二进制文件时,一定要设置 } request.get(options).on('response',function (response){//显示进度条 console.log(response); var proStream = progress({ length: response.headers['content-length'], time: 500 /* ms */ }); proStream.on('progress', function(progress) { var percentage = Math.round(progress.percentage) $(".progress-bar").css('width',percentage+"%"); $(".percent").text(percentage+"%"); }); request.get(options).pipe(proStream).pipe(tZip);//先pipe到proStream再pipe到文件的写入流中 })
相关文章推荐
- Android DownloadManager下载文件,实时显示下载进度
- Groovy下载文件并实时显示下载进度
- C#下载文件(可显示进度)的方法实现
- 基于Node.js的文件下载服务器
- Java文件下载,HTML进度条实时刷新进度
- Android——下载apk文件,并在通知栏显示下载进度
- [C#]实现文件复制[更新]实时显示进度条
- android中如何下载文件并显示下载进度
- Java网络编程之单线程下载文件设置显示进度(一)
- RxJava + Retrofit+okhttp 封装,包含对相同格式请求数据、相同格式返回数据处理,显示 Material Design 加载 dialog,文件上传下载进度展示、全局异常捕捉。
- 下载远程文件, 加入一个进度显示 分类: python 2013-06-09 12:09 314人阅读 评论(0) 收藏
- arcgis for JS 使用 Node.js 加载shp文件显示到地图上
- C# Winform下载文件并显示进度条
- Retrofit+Rxjava 下载文件(带进度显示)
- 浅析Node.js实现HTTP文件下载
- 利用js实现无刷新上传头像(或文件)并显示进度条
- winform 下载文件显示进度和百分比
- webrequest与webclient 下载文件,显示进度(访问网页)
- C#下载文件(可显示进度)的方法实现
- 下载远程文件, 加入一个进度显示