前端批量下载文件打包为zip

发布于:2025-05-17 ⋅ 阅读:(14) ⋅ 点赞:(0)

多文件需要一次性下载为zip文件

这是近期遇到的一个需求,本身是多文件上传的,下载时单个下载太慢又繁杂,用户希望能一次性批量下载,就选择了jszip

import axios from "axios"
import JSZip from "jszip"
import FileSaver from "file-saver"

const getFile = url => {
    return new Promise((resolve, reject) => {
        axios({
            headers: {
                'Cache-control': 'no-cache'
            },
            method: "get",
            url,
            responseType: "arraybuffer"
        })
            .then(data => {
                resolve(data.data)
            })
            .catch(error => {
                reject(error)
            })
    })
}

const downloadFromAliOss = function (fileArr, zipName) {
    const zip = new JSZip()
    const promises = []
    fileArr.forEach(item => {
        const promise = getFile(item.url).then(data => {
            const url = new URL(item.url)
            // 获取文件类型
            // const type = url.pathname.split('.').pop() // 'jpg'
            // const typeArr = item.url.split(".")
            // const type = typeArr[typeArr.length - 1]
            // 默认文件名·
            // const nameArr = item.url.split("/")
            const name = item.name || url.pathname.split('/').pop()
            // const foldPath = item.foldPath || ""
            zip.file(name, data, {
                binary: true
            })
        })
        promises.push(promise)
    })

    Promise.all(promises).then(() => {
        zip.generateAsync({ type: "blob" }).then(content => {
            FileSaver.saveAs(content, zipName || `文件.zip`)
        })
    })
}

export default downloadFromAliOss

调用

downloadalioss(signedFileList, '附件.zip')

网站公告

今日签到

点亮在社区的每一天
去签到