Vue 中批量下载文件并打包的示例代码 file-saver + jszip

2 篇文章 0 订阅

        1、首先先下载所需要的插件 【含对应版本】

 yarn add file-saver@2.0.5 jszip@3.6.0

2、在需要的页面引入相关内容   

import { saveAs } from 'file-saver';
import JSZip from 'jszip';

3、将url地址转为 blob类型文件。此处使用发送请求的方式。用于后续文件下载。保存使用

getImgUrlToArrayBuffer(url) {
	url = (url.startsWith('http') || url.startsWith('//')) ? url : window.location.origin) + url;
	return new Promise((resolve, reject) => {
		let xhr = new XMLHttpRequest();
		xhr.open('GET', url, true);
		xhr.responseType = 'blob';
		xhr.onload = function() {
			let result = {
				'code': 0,
				'message': '',
				'data': ''
			};
			if (this.status === 200) {
				result.data = this.response;
				resolve(result);
			} else {
				result.code = 1;
				result.data = null;
				result.message = '读取文件失败!';
				reject(result);
			}
		};
		xhr.send();
	});
}

4、编写代码内容,异步支持多文件下载,提高相关效率

function saveAsZip() {
	// 遍历添加下载逻辑
	let zip = new JSZip();
	let downloadUrlRequestList = [];
	for (let item of selectRows) {  // 图片数组
	    downloadUrlRequestList.push(
	        this.getImgUrlToArrayBuffer(
	             item.url, item.fileName
	        .then(res => {
	            if (res.code === 0) {
                    // 添加文件内容到zip中
	                zip.file(item.fileName, res.data, { binary: true });
	            }
	        })
	     );
	 }
	if (downloadUrlRequestList.length) {
		Promise.all(downloadUrlRequestList).then(_ => {
			// 生成二进制
			zip.generateAsync({ type: 'blob' }).then(res => {
				// 通过file 保存图片
				saveAs(res, new Date().getTime() + '.zip');
			}).catch(() => {
				this.$message.erro('图片打包失败,请重新下载!');
			});
		}).catch(() => {
			this.$message.erro('图片打包失败,请重新下载!');
		});
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值