前端实现多个图片打包下载

复制代码
npm install jszip file-saver --save
复制代码
import JSZip from "jszip";
import FileSaver from "file-saver";

const list = ref([
	"https://jiaming-test.oss-cn-huhehaote.aliyuncs.com/1993221725990686720/material/e43c4d50-02dc-4614-9132-64f15511a17e.png",
	"https://jiaming-test.oss-cn-huhehaote.aliyuncs.com/1993221725990686720/material/7bea4925-6e8d-4d79-98b0-0196d2db2bcc.png",
	"https://jiaming-test.oss-cn-huhehaote.aliyuncs.com/1993221725990686720/material/ed294f8d-088d-4648-bbe9-68ab98039173.png",
	"https://jiaming-test.oss-cn-huhehaote.aliyuncs.com/1993221725990686720/material/a531dedb-9359-49bf-bb0e-86f85bfbdcf6.png",
	"https://jiaming-test.oss-cn-huhehaote.aliyuncs.com/1993221725990686720/material/71077921-7647-469b-8f42-8fa804c2cf00.png"
]);
// 单个图片转Blob
const getImageBlob = async (imageUrl) => {
	try {
		// 处理阿里云OSS图片跨域(添加cors模式)
		const response = await fetch(imageUrl, {
			mode: "cors",
			cache: "no-cache"
		});
		if (!response.ok) throw new Error(`图片加载失败: ${response.status}`);
		return await response.blob();
	} catch (error) {
		console.error(`处理图片失败: ${imageUrl}`, error);
		return null;
	}
};

// 批量打包下载主函数
const downloadImagesAsZip = async () => {
	const zip = new JSZip();
	try {
		// 遍历图片列表,添加到压缩包
		const promises = list.value.map(async (url, index) => {
			const blob = await getImageBlob(url);
			if (blob) {
				// 提取图片名称(或自定义命名,如 图片1.png、图片2.png)
				const fileName = url.split("/").pop() || `图片${index + 1}.png`;
				zip.file(fileName, blob); // 添加到压缩包
			}
		});
		// 等待所有图片处理完成
		await Promise.all(promises);

		// 生成压缩包(开启压缩减小体积)
		const zipBlob = await zip.generateAsync({
			type: "blob",
			compression: "DEFLATE",
			compressionOptions: { level: 6 }
		});

		// 下载压缩包(自定义文件名)
		FileSaver.saveAs(zipBlob, "阿里云OSS图片包.zip");
	} catch (error) {
		console.error("打包下载失败", error);
	}
};

效果

相关推荐
ℋᙚᵐⁱᒻᵉ鲸落1 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙3 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
前端snow4 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上4 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
星栈4 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香4 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest4 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士6 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见6 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain
kyriewen6 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试