下载文件或下载压缩包

86 阅读1分钟

需求:当下载的文档只有一个时,查看并下载当前文档,当有多个时则下载压缩包接口返回数据是线上可访问的文件地址)

//this.invoiceQueryData是拿到的文档线上地址
if (this.invoiceQueryData.length == 1) {
                            this.downloadErrorExcel(this.invoiceQueryData[0].fileUrl, '发票附件')
                        } else {
                            //压缩包下载
                            const fileUrl = this.invoiceQueryData.map(item => item.fileUrl); 
                            this.downloadZip(fileUrl, `发票附件`)
                        }

方法


import JSZip from 'jszip';
import { saveAs } from 'file-saver';
downloadErrorExcel(url, name) {
            const link = $(`<a href="${url}" download="${name}信息"target="_blank"></a>`)[0];
            link.click();
        },
 async downloadZip(files, fileName) {
            // console.log(files,fileName,'触发到下载压缩包???');
            // 创建压缩包
            const zip = new JSZip();
            const folder = zip.folder(fileName);
            for (let i = 0; i < files.length; i++) {
                const fileUrl = files[i];
                const data1 = await fetch(fileUrl);
                // const imageBlob = await fetch(imageUrl);
                const fileBlob = await data1.blob();
                // 为图片命名并添加到对应的文件夹中
                folder.file(`${fileName}${i + 1}.pdf`, fileBlob);
            }
            // 生成压缩包
            const zipBlob = await zip.generateAsync({ type: 'blob' });
            saveAs(zipBlob, `${fileName}压缩包.zip`);
        },