js文件下载进度条实现

/**
* 下载
* @param  {String} url 目标文件地址
* @param  {String} filename 想要保存的文件名称
*/
download(url: string, filename: string) {
   this.getBlob(url).then(blob => {
       this.saveAs(blob, filename);
   });
}

/**
 * 获取  blob
 * @param  {String} url 目标文件地址
 * @return {Promise}
 */
getBlob(url: string) {
    return new Promise(resolve => {
        let that = this; // 创建XMLHttpRequest,会让this指向XMLHttpRequest,所以先接收一下this
        const xhr = new XMLHttpRequest();

        xhr.open("GET", url, true);

        //监听进度事件
        xhr.addEventListener(
            "progress",
            function(evt) {
                if (evt.lengthComputable) {
                    let percentComplete = evt.loaded / evt.total;
                    that.percentage = percentComplete * 100;

                    // console.log('percentComplete 0 ---------------');
                    // console.log(percentComplete);
                    // console.log(that.percentage);
                    // const dom1: any = document.querySelector('#percentage_tm_drawer');
                    // console.log(dom1);
                    // console.log(this);
                    // console.log(env);
                    // console.log('percentComplete 1 ---------------');
                    // console.log(dom1['percentage']);
                    // dom1['percentage'] = percentComplete * 100;
                    // console.log(dom1['percentage']);
                    // $("#progressing").html((percentComplete * 100) + "%");
                }
            },
            false
        );

        xhr.responseType = "blob";
        xhr.onload = () => {
            if (xhr.status === 200) {
                resolve(xhr.response);
            }
        };
        
        xhr.send();
    });
}

/**
 * 保存
 * @param  {Blob} blob
 * @param  {String} filename 想要保存的文件名称
 */
saveAs(blob: any, filename: string) {
    // ie的下载
    if (window.navigator.msSaveOrOpenBlob) {
        navigator.msSaveBlob(blob, filename);
    } else {
        // 非ie的下载
        const link = document.createElement("a");
        const body: any = document.querySelector("body");

        link.href = window.URL.createObjectURL(blob);
        link.download = filename;

        // fix Firefox
        link.style.display = "none";
        body.appendChild(link);

        link.click();
        body.removeChild(link);

        window.URL.revokeObjectURL(link.href);
    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值