工具实现揭秘转换工具
文件打包压缩是怎么实现的
fflate 在浏览器里打 ZIP——9 文件 20MB 以内的本地打包流水线
TL;DR:文件打包压缩把最多 9 个、总计 ≤20MB 的任意类型文件一键打成单个 ZIP,全程浏览器内存完成。它是图片压缩、多平台裁切两个批量工具的「打包下载」底层引擎的独立完整版。
⏱️ 30 秒上手
- 打开 tools.guangmin.top/tools/zip_pack;
- 拖入或选择多个文件(≤9 个,总计 ≤20MB);
- 点「打包下载 ZIP」——下载的文件名带秒级时间戳(如
广民工具箱-打包-20261101-140046.zip),连打两次不会互相覆盖; - 打包完成后同一批文件仍可再次打包(列表保留,手动「清空」才移除)。
🔧 它是怎么实现的
三个实现要点:
- fflate 的选型理由:ZIP 打包的核心是 DEFLATE 压缩算法(ZIP 格式的标准算法)。fflate 是纯 JavaScript 实现里速度最快、体积最小的库之一(几 KB),同步 API 简单到一行
zipSync(files)。对比方案:pako(老牌但 API 繁琐)、JSZip(功能全但体积大)——在「只打 ZIP」这个单一场景,fflate 全赢; - 文件名时间戳防覆盖:早期版本输出名固定,浏览器第二次下载会弹「已存在,要替换吗」。现版本文件名秒级时间戳(
广民工具箱-打包-YYYYMMDD-HHmmss.zip),连续多次下载互不覆盖; - 状态机设计:文件列表是一条状态机(queued → done),打包完成只改状态不清文件——同一批可以反复打包,删除靠显式「清空/移除」。这条交互修正来自真实用户反馈(打完包按钮即灰、想重下只能重传)。
📏 边界与限制
| 项 | 值 | 说明 |
|---|---|---|
| 文件数 | ≤9 | 全站批量工具统一上限(TOOL_BATCH_FILE_MAX) |
| 总大小 | ≤20MB | 超出在添加时即拦截 |
| 压缩率 | 取决于内容 | 已压缩格式(JPG/MP4/ZIP)几乎不再变小,文本类收益最大 |
| 下载名 | 秒级时间戳 | 同批可重复下载 |
🔒 隐私口径
文件字节只在浏览器内存里压缩,产物直接写回你的下载目录。服务器不接触任何文件内容。