Vue批量下载图片

需求

  1. 点击列表中下载按钮实现下载单张图片
  2. 复选框勾选,点击批量下载按钮,实现下载zip

实现

在页面的script中引入依赖:

import JSZip from 'jszip'
import FileSaver from 'file-saver'

批量下载图片弹窗中代码:

const tipTitle = ref<string>('')

// 获取文件blob
const getFile = (url: any) => {
    return new Promise((resolve, reject) => {
        axios({
            method: 'get',
            url,
            responseType: 'blob'
        })
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err.toString())
            })
    })
}

// 图片批量处理成压缩包后下载
const batchPictureZip = (data: any) => {
    const zip = new JSZip()
    const promises = []
    const cache = {}
    tipTitle.value = '正在加载压缩文件...'
    for (const item of data) {
        const promise = getFile(item.url).then(data => {
            // 下载文件, 并存成ArrayBuffer对象
            zip.file(item.fileName, data, { binary: true }) // 逐个添加文件
            cache[item.fileName] = data
        })
        promises.push(promise)
    }
    Promise.all(promises)
        .then(() => {
            zip.generateAsync({ type: 'blob' }).then((content: any) => {
            	tipTitle.value = '正在压缩...'
                // 生成二进制流
                FileSaver.saveAs(content, '文件名') // 利用file-saver保存文件  自定义文件名
                tipTitle.value = '压缩完成'
                ElMessage.success('下载成功')
            })
        })
        .catch(res => {
            ElMessage.warning('下载失败')
        })
}

// 提交
const onSubmit = () => {
    submitLoading.value = true
    let params = {
        clarityLevel: clarityLevel.value,
        recordIds: rowInfoArray.rowInfo?.map((item: any) => {
            return item.id
        })
    }
    downloadPicture(params)
        .then(res => {
            submitLoading.value = false
            dialogVisible.value = false
            if (res.data.length == 1) {
                // 下载单张图片
                let url = res.data[0].url
                let name = res.data[0].fileName
                FileSaver.saveAs(url, name)
            } else {
                // 批量下载图片
                batchPictureZip(res.data)
            }            
        })
        .catch(e => {
            submitLoading.value = false
        })
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Komorebi゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值