js 批量下载文件为压缩包

 有一个需求,是列表里面有很多图片或者pdf文件的url,用户想要一个批量下载,点击按钮后,把列表的这些文件全部都下载下来,并且是一个压缩包,包里面包含那些url对应的文件。

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>doc</title>

</head>
<body>
 <button onclick='packageImages()'>批量下载</button>


<!-- 下面是需要用到的js -->

<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/jszip/3.10.1/jszip.min.js"></script>
<script src="https://cdn.staticfile.org/FileSaver.js/2.0.5/FileSaver.min.js"></script>
<script src="https://cdn.staticfile.org/axios/1.2.0/axios.min.js"></script>




<script>
   function packageImages() {
		
		var imgsSrc = ['https://img-home.csdnimg.cn/images/20201124032511.png', 'https://csdnimg.cn/medal/qixiebiaobing4@240.png']; // 这里可以替换为自己的逻辑,比如从哪里获取之类的

		var promises =[]
		const zip = new JSZip();
		for(let item of imgsSrc){
			let axios = getFile(item).then(({data})=>{
				let fileName = getFileName(item) //文件名
				zip.file(fileName, data, {binary: true});
			})
			promises.push(axios)
		}


		Promise.all(promises).then(() => {
			if (Object.keys(zip.files).length > 0) {
				zip.generateAsync({type: 'blob'}).then((blob) => {
					saveAs(blob, 'files.zip');
					console.log('批量下载成功')
				});
			} else {
				console.log('下载全部失败')
			}
		});
	}
	

	function getFileName(filePath){
		var startIndex = filePath.lastIndexOf("/");
		if(startIndex != -1)
			return filePath.substring(startIndex+1, filePath.length).toLowerCase();
		else return "";
	}

	function getFile(url){
		return new Promise((resolve, reject) => {
					axios({
						url,
						method: 'GET',
						responseType: 'blob',
					})
					.then((data) => {
						resolve(data);
					})
					.catch((err) => {
						reject(err.toString());
					});
		});
	}


</script>

</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值