x-zip-s ZIP压缩解压
对应用缓存或专有目录中的文件做 zip 压缩 / 解压。接口改为 DCloud 风格 success / fail / complete。
兼容性
| Harmony | IOS | Android | WEB | 小程序 |
|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 |
调用
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 保存到系统目录时的文件名。
平台实现
| 平台 | 压缩 | 解压 | 保存到系统目录 |
|---|---|---|---|
| Android | Apache Commons Compress | 同上,并拦截 .. 路径穿越 | ACTION_CREATE_DOCUMENT |
| iOS | 内置 ZIPFoundation 0.9.19,条目用源目录相对路径(不用 /var 沙盒绝对路径) | 按相对路径解压,拦截 ..;目录条目不会再被当成非法文件名 | 系统文档导出面板 |
| HarmonyOS | @kit.BasicServicesKit zlib | zlib.decompressFile | DocumentViewPicker.save |
| Web | JSZip 3.10.1 | JSZip | 浏览器下载 |
| 微信 | 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.txt、notes/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)
- 对指定目录/文件进行压缩并返回压缩文件路径以便上传和管理.
