附件打包 ZIP
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/wnfb2026835。
技能介绍
解决什么问题
在业务系统中,用户常常需要一次性下载多份文件,例如签署的多份合同、跟进记录里的多个附件,或是批量导出的图片。如果由后端逐一处理再合并,不仅会增加服务器的带宽压力,还需要编写额外的接口逻辑。
这个技能提供了一种纯前端打包方案:利用浏览器原生的下载能力,在客户端直接将多个文件流压缩为 ZIP 包并保存到本地,完全绕过后端中转。
技能如何工作
核心实现基于 jszip,技能提供的关键步骤如下:
- 文件名清洗:在写入 ZIP 条目时,对文件名进行严格校验,过滤掉
/、\等非法路径字符,并坚决杜绝../路径穿越行为,防止生成结构混乱的压缩包。 - 打包与下载:建议配合
file-saver或原生URL.createObjectURL实现文件流的落盘。技能强调交付可直接运行的 TS/JS 代码片段,无需依赖仓库私有 API。 - 状态反馈:对于体积较大的数据,可利用
generateAsync方法的onUpdate回调,在 UI 层展示当前的压缩进度,避免用户面对卡顿界面误以为页面死机。
适用边界与注意点
虽然纯前端方案减轻了服务端负担,但必须关注以下硬约束:
- 内存风险:所有数据均驻留内存处理。如果单次打包总大小超过 50MB,极易引发浏览器内存溢出或页面崩溃,请慎用。
- 空列表拦截:逻辑必须包含防御性编程,当传入的文件列表为空时,应拒绝执行打包并给出明确提示,避免生成空的 ZIP 文件。
- 版本隔离:本技能不涉及具体的依赖升级策略,使用方需自行管理
jszip等库的版本兼容问题。
使用场景
- 客服在网页端回复用户时,需要把多张现场照片打成ZIP附件直接下载
- 法务在浏览器预览合同库时,要把选中的几份PDF合并为一个压缩包归档
- 前端工程师要在不刷新页面的情况下,把接口返回的多个图片流打包成ZIP下载
- 运营在后台导出多条素材记录时,需要把对应的图片附件一键打包
适合人员
- 需要在网页端实现多文件下载的前端开发者
- 负责处理多附件预览与导出的法务、行政等业务人员
- 需要将接口返回文件流打包的后端或全栈工程师
- 负责文档管理系统中附件批量下载的运营维护人员