Nodejs功能模块:
简介如下:
https => 建立远程网络连接
request => 用来请求资源
progress => 实时获取下载进度
fs => 用来创建读写流
详情请查询Nodejs官网:http://nodejs.cn/api/http.html
代码如下:
/**
* 将远程资源下载到指定目录
* @param {String} fileName 文件名
* @param {String} remoteUrl 远程路径
* @param {String} outPutPath 本地输出路径
* @param callback '() => {}';
*/
let downloadRequest = null;
export let _remoteFile2Local = (fileName, remoteUrl, outPutPath, callback) => {
https.get(remoteUrl + fileName, (res) => {
if (res.statusCode === 200) {
res.setEncoding(null); // 设置编码
let str = progress({
length: res.headers['content-length'],
time: 500 /* ms */
});
str.on('progress', function (progress) {
console.log('percentage:', progress.percentage) // 下载进度
});
let url = remoteUrl + fileName; // 远程文件下载地址
let globalRequest = request.get({url: url, encoding: null}, (err, requestRes, body) => {
if (err) throw err
callback && callback();
});
// 两个pip(通道) => 下载进度监控、存储到本地路径
globalRequest.pipe(str).pipe(fs.createWriteStream(path.join(outPutPath, fileName)));
downloadRequest = globalRequest; // 用于取消下载
} else {
console.log('远程地址出错:', res.statusMessage);
}
})
}
/**
* 取消下載
* @param callback '() => {}';
*/
export let _abortDownload2 = (callback) => {
downloadRequest.abort(); // 停止网络请求
// to do 删除本地已经下载的文件/夹
callback && callback();
}