Loading

NodeJS下载文件并显示下载进度

const fs = require('fs');
const request = require("request")
const progress = require('progress-stream')
const https = require("https")
const http = require("http")

/* 下载文件
		@param url 文件地址
		@param targetUrl 存储地址
	 */
async function downloadUrlFile(url, targetUrl) {
    let stream = fs.createWriteStream(targetUrl)
    let p = await setDownloadProgress(url)
    return new Promise(function (resolve, reject) {
        request(url).pipe(p).pipe(stream).on('close', function () {
            winston.info(targetUrl + '下载完毕');
            resolve(targetUrl)
        });
    })
}
/* 获取文件大小 */
async function getUrlFileSize(url) {
    return new Promise(r => {
        let h = {http, https}
        let isHttps = url.indexOf("https") != -1
        h[isHttps ? "https" : "http"].get(url, {
            rejectUnauthorized: false
        }, (res) => {
            r(res.headers['content-length'])
        })
    })
}

/* 设置下载进度 */
async function setDownloadProgress(url) {
    let p = progress({
        length: await getUrlFileSize(url),
        time: 500
    })
    p.on('progress', progress => {
        console.log("下载进度:", progress.percentage)
    });
    return p
}
posted @ 2022-11-24 10:23  冲锋的麦克  阅读(1114)  评论(0编辑  收藏  举报