更新记录

1.0.0(2026-06-29)

  • 支持安卓、iOS、鸿蒙Next
  • 支持ZIP、7z、RAR、TAR、GZIP、BZIP2、XZ、CPIO多种压缩格式

平台兼容性

uni-app(4.45)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
√ 1.0.0 √ 1.0.0 × × √ 1.0.0 √ 1.0.0 5.0 1.0.0 12 1.0.0 √ 1.0.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.45)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
× × 5.0 1.0.0 12 1.0.0 √ 1.0.0 ×

其他

多语言 暗黑模式 宽屏模式
√ √ √

超强文件压缩解压插件 支持安卓/iOS/鸿蒙(cz-unzip)UTS插件

介绍

  1. 支持多种压缩/解压格式:ZIP、7z、RAR、TAR、GZIP、BZIP2、XZ、CPIO。
  2. 支持加密压缩/解压(ZIP AES-256、7z AES-256、RAR 密码),鸿蒙暂不支持密码。
  3. 支持压缩级别设置、分卷压缩(仅 Android)、进度回调等高级功能。
  4. 支持列出压缩包内文件列表(部分格式仅 Android)。

插件试用

APK下载体验

API说明

方法名称 参数 返回参数 说明
requestPermission 回调 无 请求文件系统权限,Android/iOS/鸿蒙自动适配
resolveFilePath string string 将 URI 或 file:// 路径转为本地可用的绝对路径
zip ZipParams 无 将文件/目录压缩为 .zip 格式
unzip UnzipParams 无 解压 .zip 文件
listZipFiles ListFilesParams 无 列出 .zip 文件内容(仅 Android)
sevenZip SevenZParams 无 将文件/目录压缩为 .7z 格式
unsevenZip UnSevenZParams 无 解压 .7z 文件
listSevenZFiles ListSevenZFilesParams 无 列出 .7z 文件内容(仅 Android)
unrar UnRarParams 无 解压 .rar 文件
listRarFiles ListRarFilesParams 无 列出 .rar 文件内容(仅 Android)
tar TarParams 无 将文件/目录打包为 .tar 归档
untar UnTarParams 无 解包 .tar 文件
listTarFiles ListTarFilesParams 无 列出 .tar 文件内容(仅 Android)
gzip GzipParams 无 将单文件压缩为 .gz 格式(不支持目录)
ungzip UnGzipParams 无 解压 .gz 文件
bzip2 Bzip2Params 无 将单文件压缩为 .bz2 格式(仅 Android,不支持目录)
unbzip2 UnBzip2Params 无 解压 .bz2 文件(仅 Android)
xz XzParams 无 将单文件压缩为 .xz 格式(不支持目录)
unxz UnXzParams 无 解压 .xz 文件
cpio CpioParams 无 将文件/目录归档为 .cpio 格式(仅 Android)
uncpio UnCpioParams 无 解包 .cpio 文件(仅 Android)
listCpioFiles ListCpioFilesParams 无 列出 .cpio 文件内容(仅 Android)

公共参数类型说明

ZipParams(ZIP 压缩参数)
参数 类型 必填 默认值 说明
srcPaths string[] 或 null 否 null 要压缩的文件/目录路径数组(优先于 srcPath)
srcPath string 否 - 单个文件/目录路径(srcPaths 为空时使用)
destPath string 是 - 输出的 .zip 文件完整路径
password string 或 null 否 null 压缩密码,iOS 固定 AES-256
level number 或 null 否 5 压缩级别 0-9,0=仅存储,9=最高压缩比
method string 或 null 否 "DEFLATE" 压缩方法:"DEFLATE" 或 "STORE"(仅 Android)
encryptionMethod string 或 null 否 "AES" 加密方式(仅 Android,有密码时生效)
aesKeyStrength string 或 null 否 "KEY_STRENGTH_256" AES 密钥强度(仅 Android)
includeRootFolder boolean 或 null 否 true 压缩目录时是否包含根目录名
readHiddenFiles boolean 或 null 否 - 是否包含隐藏文件(仅 Android)
readHiddenFolders boolean 或 null 否 - 是否包含隐藏目录(仅 Android)
defaultFolderPath string 或 null 否 null zip 内的默认父路径(仅 Android)
fileNameInZip string 或 null 否 null 单文件在 zip 中的文件名(仅 Android)
charset string 或 null 否 null 文件名/注释编码如 "UTF-8"、"GBK"(仅 Android)
zipComment string 或 null 否 null zip 文件注释(仅 Android)
splitArchive boolean 或 null 否 false 是否分卷(仅 Android)
splitLength number 或 null 否 0 分卷大小(字节),最小 65536(仅 Android)
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 ZipResult 类型
UnzipParams(ZIP 解压参数)
参数 类型 必填 默认值 说明
srcPath string 是 - .zip 文件路径
destPath string 是 - 解压目标目录
password string 或 null 否 null 解压密码
fileName string 或 null 否 null 仅解压 zip 内指定文件(仅 Android)
charset string 或 null 否 null 文件名/注释编码(仅 Android)
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 UnzipResult 类型
SevenZParams(7z 压缩参数)
参数 类型 必填 默认值 说明
srcPaths string[] 或 null 否 null 要压缩的文件/目录路径数组
srcPath string 否 - 单个文件/目录路径
destPath string 是 - 输出的 .7z 文件完整路径
password string 或 null 否 null AES-256 加密密码
method string 或 null 否 "LZMA2" 压缩方法:"COPY" / "LZMA2" / "DEFLATE" / "BZIP2",iOS 支持 "LZMA"/"LZMA2"/"PPMd"
level number 或 null 否 7 压缩级别 1-9
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 SevenZResult 类型
UnRarParams(RAR 解压参数)
参数 类型 必填 默认值 说明
srcPath string 是 - .rar 文件路径
destPath string 是 - 解压目标目录
password string 或 null 否 null 解压密码
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 UnRarResult 类型
TarParams(TAR 打包参数)
参数 类型 必填 默认值 说明
srcPaths string[] 或 null 否 null 要打包的文件/目录路径数组
srcPath string 否 - 单个文件/目录路径
destPath string 是 - 输出的 .tar 文件完整路径
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 TarResult 类型
GzipParams(GZIP 压缩参数,仅支持单文件)
参数 类型 必填 默认值 说明
srcPath string 是 - 单文件路径(不能是目录)
destPath string 是 - 输出的 .gz 文件完整路径
level number 或 null 否 - 压缩级别 0-9(仅 Android)
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 GzipResult 类型
Bzip2Params(BZ2 压缩参数,仅支持单文件,仅 Android)
参数 类型 必填 默认值 说明
srcPath string 是 - 单文件路径(不能是目录)
destPath string 是 - 输出的 .bz2 文件完整路径
level number 或 null 否 5 压缩级别 0-9
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 Bzip2Result 类型
XzParams(XZ 压缩参数,仅支持单文件)
参数 类型 必填 默认值 说明
srcPath string 是 - 单文件路径(不能是目录)
destPath string 是 - 输出的 .xz 文件完整路径
level number 或 null 否 6 LZMA2 预设级别 0-9
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 XzResult 类型
CpioParams(CPIO 归档参数,仅 Android)
参数 类型 必填 默认值 说明
srcPaths string[] 或 null 否 null 要归档的文件/目录路径数组
srcPath string 否 - 单个文件/目录路径
destPath string 是 - 输出的 .cpio 文件完整路径
progressListener (progress: number)=>void 否 - 进度回调,返回 0-100
completeListener (res: ResponseEntity)=>void 是 - 完成回调,data 为 CpioResult 类型

返回值类型说明

ResponseEntity(统一响应类型)
{
  success: boolean,       // true=成功, false=失败
  data?: any | null,      // 成功时包含具体结果
  message?: string | null // 状态消息或错误描述
}
ZipResult
{
  srcPaths: string[],     // 源路径
  destPath: string,       // 输出 .zip 路径
  splitArchive: boolean,  // 是否分卷
  splitLength: number | null
}
UnzipResult
{
  srcPath: string,          // 源 .zip 路径
  destPath: string,         // 目标目录
  extractedFiles: string[]  // 解压出的文件路径列表
}
SevenZResult
{
  srcPaths: string[],    // 源路径
  destPath: string,      // 输出 .7z 路径
  fileCount: number,     // 压缩的文件数量
  totalSize: number      // 压缩前总大小(字节)
}
GzipResult
{
  srcPath: string,    // 源路径
  destPath: string,   // 输出 .gz 路径
  totalSize: number   // 压缩前总大小(字节)
}

平台支持

方法 Android iOS 鸿蒙
zip ✅ 完整 ✅ 部分 ✅ 无密码
unzip ✅ 完整 ✅ 部分 ✅ 无密码
listZipFiles ✅ ❌ ❌
sevenZip ✅ 完整 ✅ 部分 ✅ 无密码
unsevenZip ✅ 完整 ✅ 部分 ✅ 无密码
listSevenZFiles ✅ ❌ ❌
unrar ✅ ✅ ✅ 仅RAR4
listRarFiles ✅ ❌ ❌
tar ✅ ✅ ✅
untar ✅ ✅ ✅
listTarFiles ✅ ❌ ❌
gzip ✅ ❌ ✅
ungzip ✅ ❌ ✅
bzip2 ✅ ❌ ❌
unbzip2 ✅ ❌ ❌
xz ✅ ❌ ✅
unxz ✅ ❌ ✅
cpio ✅ ❌ ❌
uncpio ✅ ❌ ❌
listCpioFiles ✅ ❌ ❌

注意:

  • 鸿蒙:ZIP/7z/RAR 操作不支持密码加密;7z/GZIP/XZ 不支持自定义压缩级别。
  • iOS:gzip/ungzip/bzip2/unbzip2/xz/unxz/cpio/uncpio 暂不支持。
  • RAR:鸿蒙仅支持 RAR4 格式解压,不支持 RAR5 和加密 RAR。

uvue代码调用示例

<template>
    <scroll-view style="flex: 1;" scroll-y="true">
        <view class="page-root">
            <view class="panel-card">
                <text class="panel-title">当前平台</text>
                <text class="panel-line platform-tag">{{ platform }}</text>
            </view>
            <view class="uni-padding-wrap uni-common-mt">
                <button @tap="testZip">zip压缩</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnzip">unzip解压缩</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testSevenZip">7z压缩</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnSevenZip">7z解压</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnRar">RAR解压</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testTar">TAR压缩</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnTar">TAR解压</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testGzip">GZIP压缩</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnGzip">GZIP解压</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testBzip2">BZ2压缩</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnBzip2">BZ2解压</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testXz">XZ压缩</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnXz">XZ解压</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testCpio">CPIO归档</button>
            </view>
            <view class="uni-padding-wrap uni-common-mt" style="margin-top: 10px;">
                <button @tap="testUnCpio">CPIO解包</button>
            </view>
        </view>
    </scroll-view>
</template>

<script>
    import * as module from "@/uni_modules/cz-unzip"
    import { ZipResult, GzipResult } from "@/uni_modules/cz-unzip";

    export default {
        data() {
            return {
                platform: ''
            }
        },
        onReady() {
            let device = uni.getDeviceInfo()
            console.log(`读取系统信息: ${JSON.stringify(device)}`)
            this.platform = `手机信息: ${device.deviceBrand}-${device.osName}-${device.osVersion}-${device.romVersion}`;
        },
        methods: {
            // ==================== ZIP 压缩 ====================
            testZip(){
                let self = this;
                // 1. 先请求文件权限
                module.requestPermission((res)=>{
                    // 2. 选择文件
                    uni.chooseFile({
                        count: 2,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                // 3. 解析文件路径(处理 content:// 等 URI)
                                const srcPaths = res.tempFiles.map((v) => module.resolveFilePath(v.path))
                                // 4. 调用压缩
                                module.zip({
                                    srcPaths: srcPaths,
                                    destPath: self.toZipPath(srcPaths[0]),
                                    // password: "123456",        // 可选:加密密码
                                    method: "DEFLATE",             // 压缩方法
                                    level: 5,                      // 压缩级别 0-9
                                    progressListener: (progress : number) => {
                                        console.log('压缩进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        console.log('压缩完成:' + JSON.stringify(res))
                                        if (res.success) {
                                            self.showToast('压缩成功:' + (res.data as ZipResult).destPath)
                                        } else {
                                            self.showToast('压缩失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== ZIP 解压 ====================
            testUnzip(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.unzip({
                                    srcPath: path,
                                    destPath: self.toUnzipPath(path),
                                    // password: "123456",        // 可选:解压密码
                                    charset: "utf-8",              // 文件名编码
                                    progressListener: (progress) => {
                                        console.log('解压进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        console.log('解压完成:' + JSON.stringify(res))
                                        if (res.success) {
                                            self.showToast('解压成功,输出文件:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('解压失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== 7z 压缩 ====================
            testSevenZip(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 99,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                const srcPaths = res.tempFiles.map((v) => module.resolveFilePath(v.path))
                                module.sevenZip({
                                    srcPaths: srcPaths,
                                    destPath: self.toSevenZPath(srcPaths[0]),
                                    // password: "123456",        // 可选:AES-256 加密密码
                                    method: "LZMA2",               // 压缩方法
                                    // method 不传默认 LZMA2,可选 "COPY"|"LZMA2"|"DEFLATE"|"BZIP2"
                                    progressListener: (progress : number) => {
                                        console.log('7z压缩进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        console.log('7z压缩完成:' + JSON.stringify(res))
                                        if (res.success) {
                                            self.showToast('7z压缩成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('7z压缩失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== 7z 解压 ====================
            testUnSevenZip(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.unsevenZip({
                                    srcPath: path,
                                    destPath: self.toUnSevenZPath(path),
                                    // password: "123456",        // 可选
                                    progressListener: (progress : number) => {
                                        console.log('7z解压进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('7z解压成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('7z解压失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== RAR 解压 ====================
            testUnRar(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.unrar({
                                    srcPath: path,
                                    destPath: self.toUnRarPath(path),
                                    // password: "123456",        // 可选
                                    progressListener: (progress : number) => {
                                        console.log('RAR解压进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        console.log('RAR解压完成:' + JSON.stringify(res))
                                        if (res.success) {
                                            self.showToast('RAR解压成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('RAR解压失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== TAR 打包 ====================
            testTar(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 99,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                const srcPaths = res.tempFiles.map((v) => module.resolveFilePath(v.path))
                                module.tar({
                                    srcPaths: srcPaths,
                                    destPath: self.toTarPath(srcPaths[0]),
                                    progressListener: (progress : number) => {
                                        console.log('TAR压缩进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('TAR压缩成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('TAR压缩失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== TAR 解包 ====================
            testUnTar(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.untar({
                                    srcPath: path,
                                    destPath: self.toUnTarPath(path),
                                    progressListener: (progress : number) => {
                                        console.log('TAR解压进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('TAR解压成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('TAR解压失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== GZIP 压缩(仅单文件) ====================
            testGzip(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.gzip({
                                    srcPath: path,
                                    destPath: self.toGzipPath(path),
                                    level: 5,
                                    progressListener: (progress : number) => {
                                        console.log('GZIP压缩进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('GZIP压缩成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('GZIP压缩失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== GZIP 解压(仅单文件) ====================
            testUnGzip(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.ungzip({
                                    srcPath: path,
                                    destPath: self.toUnGzipPath(path),
                                    progressListener: (progress : number) => {
                                        console.log('GZIP解压进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('GZIP解压成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('GZIP解压失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== BZIP2 压缩(仅单文件,仅 Android) ====================
            testBzip2(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.bzip2({
                                    srcPath: path,
                                    destPath: self.toBzip2Path(path),
                                    level: 5,
                                    progressListener: (progress : number) => {
                                        console.log('BZ2压缩进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('BZ2压缩成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('BZ2压缩失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== BZIP2 解压(仅单文件,仅 Android) ====================
            testUnBzip2(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.unbzip2({
                                    srcPath: path,
                                    destPath: self.toUnBzip2Path(path),
                                    progressListener: (progress : number) => {
                                        console.log('BZ2解压进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('BZ2解压成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('BZ2解压失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== XZ 压缩(仅单文件) ====================
            testXz(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.xz({
                                    srcPath: path,
                                    destPath: self.toXzPath(path),
                                    level: 6,
                                    progressListener: (progress : number) => {
                                        console.log('XZ压缩进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('XZ压缩成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('XZ压缩失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== XZ 解压(仅单文件) ====================
            testUnXz(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.unxz({
                                    srcPath: path,
                                    destPath: self.toUnXzPath(path),
                                    progressListener: (progress : number) => {
                                        console.log('XZ解压进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('XZ解压成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('XZ解压失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== CPIO 归档(仅 Android) ====================
            testCpio(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 99,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                const srcPaths = res.tempFiles.map((v) => module.resolveFilePath(v.path))
                                module.cpio({
                                    srcPaths: srcPaths,
                                    destPath: self.toCpioPath(srcPaths[0]),
                                    progressListener: (progress : number) => {
                                        console.log('CPIO归档进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('CPIO归档成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('CPIO归档失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== CPIO 解包(仅 Android) ====================
            testUnCpio(){
                let self = this;
                module.requestPermission((res)=>{
                    uni.chooseFile({
                        count: 1,
                        type: 'all',
                        success: (res) => {
                            if (res.tempFiles.length > 0) {
                                let srcPath = res.tempFiles[0].path
                                let path = module.resolveFilePath(srcPath);
                                module.uncpio({
                                    srcPath: path,
                                    destPath: self.toUnCpioPath(path),
                                    progressListener: (progress : number) => {
                                        console.log('CPIO解包进度:' + progress + '%')
                                    },
                                    completeListener: (res) => {
                                        if (res.success) {
                                            self.showToast('CPIO解包成功:' + JSON.stringify(res.data))
                                        } else {
                                            self.showToast('CPIO解包失败:' + res.message)
                                        }
                                    }
                                })
                            }
                        },
                        fail: (err) => {
                            self.showToast('选择文件失败:' + JSON.stringify(err))
                        }
                    })
                })
            },
            // ==================== 路径工具方法 ====================
            /**
             * 将任意文件路径转为对应的 .zip 路径
             * 例如:/cache/111.pdf → /cache/111.zip
             */
            toZipPath(srcPath : string) : string {
                const lastDot = srcPath.lastIndexOf('.')
                const lastSep = Math.max(srcPath.lastIndexOf('/'), srcPath.lastIndexOf('\\'))
                if (lastDot > lastSep) {
                    return srcPath.substring(0, lastDot) + '.zip'
                }
                return srcPath + '.zip'
            },
            /**
             * 将 .zip 路径转为解压目标目录
             * 例如:/cache/111.zip → /cache/111
             */
            toUnzipPath(zipPath : string) : string {
                const lower = zipPath.toLowerCase()
                if (lower.endsWith('.zip')) {
                    return zipPath.substring(0, zipPath.length - 4)
                }
                return zipPath + '_unzip'
            },
            toSevenZPath(srcPath : string) : string {
                const lastDot = srcPath.lastIndexOf('.')
                const lastSep = Math.max(srcPath.lastIndexOf('/'), srcPath.lastIndexOf('\\'))
                if (lastDot > lastSep) {
                    return srcPath.substring(0, lastDot) + '.7z'
                }
                return srcPath + '.7z'
            },
            toUnSevenZPath(path : string) : string {
                const lower = path.toLowerCase()
                if (lower.endsWith('.7z')) {
                    return path.substring(0, path.length - 3)
                }
                return path + '_un7z'
            },
            toUnRarPath(path : string) : string {
                const lower = path.toLowerCase()
                if (lower.endsWith('.rar')) {
                    return path.substring(0, path.length - 4)
                }
                return path + '_unrar'
            },
            toTarPath(srcPath : string) : string {
                const lastDot = srcPath.lastIndexOf('.')
                const lastSep = Math.max(srcPath.lastIndexOf('/'), srcPath.lastIndexOf('\\'))
                if (lastDot > lastSep) {
                    return srcPath.substring(0, lastDot) + '.tar'
                }
                return srcPath + '.tar'
            },
            toUnTarPath(path : string) : string {
                const lower = path.toLowerCase()
                if (lower.endsWith('.tar')) {
                    return path.substring(0, path.length - 4)
                }
                return path + '_untar'
            },
            toGzipPath(srcPath : string) : string {
                return srcPath + '.gz'
            },
            toUnGzipPath(path : string) : string {
                const lower = path.toLowerCase()
                if (lower.endsWith('.gz')) {
                    return path.substring(0, path.length - 3)
                }
                return path + '_ungzip'
            },
            toBzip2Path(srcPath : string) : string {
                return srcPath + '.bz2'
            },
            toUnBzip2Path(path : string) : string {
                const lower = path.toLowerCase()
                if (lower.endsWith('.bz2')) {
                    return path.substring(0, path.length - 4)
                }
                return path + '_unbz2'
            },
            toXzPath(srcPath : string) : string {
                return srcPath + '.xz'
            },
            toUnXzPath(path : string) : string {
                const lower = path.toLowerCase()
                if (lower.endsWith('.xz')) {
                    return path.substring(0, path.length - 3)
                }
                return path + '_unxz'
            },
            toCpioPath(srcPath : string) : string {
                const lastDot = srcPath.lastIndexOf('.')
                const lastSep = Math.max(srcPath.lastIndexOf('/'), srcPath.lastIndexOf('\\'))
                if (lastDot > lastSep) {
                    return srcPath.substring(0, lastDot) + '.cpio'
                }
                return srcPath + '.cpio'
            },
            toUnCpioPath(path : string) : string {
                const lower = path.toLowerCase()
                if (lower.endsWith('.cpio')) {
                    return path.substring(0, path.length - 5)
                }
                return path + '_uncpio'
            },
            showToast(msg:string){
                if(msg == ''){
                    uni.showToast({
                        icon:'none',
                        title:'未获取到相关信息'
                    })
                }else {
                    uni.showToast({
                        icon:'none',
                        title: msg
                    })
                }
            }
        }
    }
</script>

<style>
    .page-root {
        padding: 10px 15px 20px;
    }
    .panel-card {
        margin-bottom: 16px;
    }
    .panel-title {
        font-size: 15px;
        font-weight: bold;
        color: #333333;
        margin-bottom: 8px;
    }
    .panel-line {
        font-size: 13px;
        color: #666666;
        margin-bottom: 4px;
    }
    .platform-tag {
        color: #007aff;
    }
</style>

用到的权限

安卓
<!-- 读取存储 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 写入存储 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- Android 11+ 所有文件管理权限 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
鸿蒙
"requestPermissions": [
  {
    "name": "ohos.permission.READ_MEDIA",
    "reason": "$string:module_desc",
    "usedScene": {
      "abilities": ["EntryAbility"],
      "when": "always"
    }
  },
  {
    "name": "ohos.permission.WRITE_MEDIA",
    "reason": "$string:module_desc",
    "usedScene": {
      "abilities": ["EntryAbility"],
      "when": "always"
    }
  }
]

隐私、权限声明

1. 本插件需要申请的系统权限列表:

看使用说明

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件不收集任何隐私数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无