广民广民
工具实现揭秘转换工具

文件打包压缩是怎么实现的

fflate 在浏览器里打 ZIP——9 文件 20MB 以内的本地打包流水线

TL;DR:文件打包压缩把最多 9 个、总计 ≤20MB 的任意类型文件一键打成单个 ZIP,全程浏览器内存完成。它是图片压缩、多平台裁切两个批量工具的「打包下载」底层引擎的独立完整版。

⏱️ 30 秒上手

  1. 打开 tools.guangmin.top/tools/zip_pack;
  2. 拖入或选择多个文件(≤9 个,总计 ≤20MB);
  3. 点「打包下载 ZIP」——下载的文件名带秒级时间戳(如 广民工具箱-打包-20261101-140046.zip),连打两次不会互相覆盖;
  4. 打包完成后同一批文件仍可再次打包(列表保留,手动「清空」才移除)。

🔧 它是怎么实现的

三个实现要点:

  1. fflate 的选型理由:ZIP 打包的核心是 DEFLATE 压缩算法(ZIP 格式的标准算法)。fflate 是纯 JavaScript 实现里速度最快、体积最小的库之一(几 KB),同步 API 简单到一行 zipSync(files)。对比方案:pako(老牌但 API 繁琐)、JSZip(功能全但体积大)——在「只打 ZIP」这个单一场景,fflate 全赢;
  2. 文件名时间戳防覆盖:早期版本输出名固定,浏览器第二次下载会弹「已存在,要替换吗」。现版本文件名秒级时间戳(广民工具箱-打包-YYYYMMDD-HHmmss.zip),连续多次下载互不覆盖;
  3. 状态机设计:文件列表是一条状态机(queued → done),打包完成只改状态不清文件——同一批可以反复打包,删除靠显式「清空/移除」。这条交互修正来自真实用户反馈(打完包按钮即灰、想重下只能重传)。

📏 边界与限制

项值说明
文件数≤9全站批量工具统一上限(TOOL_BATCH_FILE_MAX)
总大小≤20MB超出在添加时即拦截
压缩率取决于内容已压缩格式(JPG/MP4/ZIP)几乎不再变小,文本类收益最大
下载名秒级时间戳同批可重复下载

🔒 隐私口径

文件字节只在浏览器内存里压缩,产物直接写回你的下载目录。服务器不接触任何文件内容。

🔗 延伸阅读