vue2,vue3下载多个文件打成压缩包

1.需要两个依赖

npm i jszip

npm i file-saver

2.引入

import JSZip from "jszip";

import FileSaver from "file-saver";

3.封装方法(多个文件下载),页面调用即可

/**
 * 下载文件 传数组  实例:[{url:www.123.jpg,name:'123.jpg'}]   url:文件网络路径,name:文件名字
 * @param {*} fileList 
 */
export function $downLoadFile(fileList) {
    const zip = new JSZip()
    const promises = []
    fileList.forEach((item, index) => {
        const promise = getFile(item.url).then((data) => {
            zip.file(item.name, data, { binary: true })//文件名、文件流、是否为二进制
        })
        promises.push(promise)
    })
    Promise.all(promises).then(() => {
        zip.generateAsync({ type: 'blob' }).then((content) => {
            //利用file-saver保存文件  自定义文件名
            FileSaver.saveAs(
                content,
                new Date().getTime()
            )
        })
    }).catch((err) => {
        $message.error('文件压缩失败')
    })

}
function getFile(url) {
    return new Promise((resolve, reject) => {
        //通过请求获取文件blob格式
        let xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", url, true);
        xmlhttp.responseType = "blob";
        xmlhttp.onload = function () {
            if (this.status == 200) {
                resolve(this.response);
            } else {
                reject(this.status);
            }
        }
        xmlhttp.send();
    });
}

4.封装方法(单个文件下载),页面调用即可

/**
 * 单个下载文件
 * @param {*} url 
 */
export function $downloadimg(urls, fileName) {
    const a = document.createElement('a')
    a.href = urls
    a.download = fileName // 下载后文件名
    a.style.display = 'none'
    document.body.appendChild(a)
    a.click() // 点击下载
    document.body.removeChild(a) // 下载完成移除元素

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值