Skip to content

x-zip-s ZIP压缩解压

对应用缓存或专有目录中的文件做 zip 压缩 / 解压。接口改为 DCloud 风格 success / fail / complete

兼容性

HarmonyIOSAndroidWEB小程序
支持支持支持支持支持

调用

ts
import { addZip, unZip, addZipAndSaveDisk } from "@/uni_modules/x-zip-s"

addZip({
  source: uni.env.CACHE_PATH + "/backup",
  dest: uni.env.CACHE_PATH + "/backup.zip",
  success: (res) => {
    console.log(res.path, res.fileCount)
  },
  fail: (err) => {
    console.log(err.errCode, err.errMsg)
  }
})

unZip({
  source: uni.env.CACHE_PATH + "/backup.zip",
  dest: uni.env.CACHE_PATH + "/restore",
  success: (res) => {
    console.log(res.files)
  }
})

addZipAndSaveDisk({
  source: uni.env.CACHE_PATH + "/backup",
  fileName: "backup.zip",
  success: (res) => {
    console.log(res.path)
  }
})

Web 没有 uni.getFileSystemManager(),用 files 注入内存文件:

ts
addZip({
  dest: "demo.zip",
  files: [
    { name: "hello.txt", text: "hello-x-zip-s" },
    { name: "notes/info.txt", text: "nested-ok" }
  ],
  success: (res) => {
    unZip({
      source: "demo.zip",
      dest: "out",
      success: (out) => {
        console.log(out.files[0].text)
      }
    })
  }
})

方法

名称说明
addZip压缩目录、单文件,或 files 内存列表
unZip解压 zip 到目标目录
addZipAndSaveDisk先压缩,再打开系统保存面板(Web 触发下载;微信写入 USER_DATA_PATH

参数

source 待压缩目录/文件,或待解压 zip。dest 输出 zip / 解压目录。files 可选内存文本文件。fileName 保存到系统目录时的文件名。

平台实现

平台压缩解压保存到系统目录
AndroidApache Commons Compress同上,并拦截 .. 路径穿越ACTION_CREATE_DOCUMENT
iOS内置 ZIPFoundation 0.9.19,条目用源目录相对路径(不用 /var 沙盒绝对路径)按相对路径解压,拦截 ..;目录条目不会再被当成非法文件名系统文档导出面板
HarmonyOS@kit.BasicServicesKit zlibzlib.decompressFileDocumentViewPicker.save
WebJSZip 3.10.1JSZip浏览器下载
微信JSZip(官方无压缩 API)FileSystemManager.unzip写入用户文件目录

浏览器 CompressionStream 只支持 gzip/deflate,不是 zip 容器,所以 Web 用 JSZip。微信有官方解压,没有官方打包。

错误码

含义
1001系统错误
1002参数错误
1003源路径不存在
1004写入失败
1005当前平台不支持
1006压缩失败
1007解压失败
1008用户取消

Android 请打自定义基座。iOS 在 Mac 上可本地编译,Windows 开发 iOS 需打包基座。

版本

版权归 https://xui.tmui.design 你不得修改及二次开发,仅供 TMUI4 会员商用使用。不得转给非 VIP 会员使用,一经查实数倍赔偿,并追究法律责任。

更新日志

1.1.2(2026-08-20)

  • 修复 iOS 解压校验失败:unzipItem 把目标目录当成文件,notes/ 目录条目被拼到外面,系统报「文件名称"notes"无效」。改为按相对路径自建目录并解压文件。

1.1.1(2026-08-20)

  • 修复 iOS 压缩条目写成 /var/... 沙盒绝对路径:改为按源目录相对路径入包(hello.txtnotes/info.txt),与 Android 对齐。
  • 补齐 iOS 隐私清单 File Timestamp(C617.1)声明。

1.1.0(2026-08-20)

  • 改为 DCloud 风格 options + success/fail/complete,五端 API 对齐。
  • 新增 Web(JSZip)与微信小程序(官方 unzip + JSZip 压缩)。
  • 鸿蒙改为系统 zlib,去掉缺失的 HAR。
  • Android 补齐保存到系统目录;解压拦截路径穿越。
  • iOS 内置 ZIPFoundation 源码,不再走 CocoaPods。

1.0.2(2026-03-23)

  • 修复安卓端压缩包可能在电脑端无法解压。

1.0.1(2025-08-17)

  • 鸿蒙原生支持。

1.0.0(2024-12-18)

  • 对指定目录/文件进行压缩并返回压缩文件路径以便上传和管理.
最近更新