HarmonyOS鸿蒙Next中手机系统升级到6.0了。不过之前app可以正常解压一个/static/目录下的zip文件,使用plus.zip.decompress解压文件,但一直没有反应,不知道是权限的原因,还是plus.zip.decompress这个使用不支持?
HarmonyOS鸿蒙Next中手机系统升级到6.0了。不过之前app可以正常解压一个/static/目录下的zip文件,使用plus.zip.decompress解压文件,但一直没有反应,不知道是权限的原因,还是plus.zip.decompress这个使用不支持? 手机系统升级到6.0了。不过之前app可以正常解压一个/static/目录下的zip文件,使用plus.zip.decompress解压文件,但一直没有反应,不知道是权限的原因,还是plus.zip.decompress这个使用不支持?@ohos.zlib是在DevEco Studio开发使用的,不是在uniapp上开发使用的吧?我想了解的是在uniapp上,可否有供使用的解压api?
更多关于HarmonyOS鸿蒙Next中手机系统升级到6.0了。不过之前app可以正常解压一个/static/目录下的zip文件,使用plus.zip.decompress解压文件,但一直没有反应,不知道是权限的原因,还是plus.zip.decompress这个使用不支持?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
方案 1.uts 插件
- HBuilderX → 新建 uts 插件 uni_modules/uts-ohos-zip。
- 在插件 index.uts 里:
// index.uts (编译到鸿蒙侧就是一段原生代码)
import zlib from '@ohos.zlib';
import fileIO from '@ohos.file.fs';
export function decompressZip(srcPath: string, destPath: string): Promise<void> {
return new Promise<void>((resolve, reject) => {
// 1. 打开 zip
let srcFile = fileIO.openSync(srcPath, fileIO.OpenMode.READ_ONLY);
// 2. 调 zlib 解压
zlib.decompressFile({
srcFd: srcFile.fd,
dstDir: destPath,
onComplete: () => {
fileIO.closeSync(srcFile);
resolve();
},
onFail: (err: BusinessError) => {
fileIO.closeSync(srcFile);
reject(new Error('zlib err:' + err.code));
}
});
});
}
- 前端调用:
const uts = uni.requireNativePlugin('uts-ohos-zip')
uts.decompressZip(
`${uni.env.USER_DATA_PATH}/static/test.zip`,
`${uni.env.USER_DATA_PATH}/unzip`,
() => { console.log('解压完成') },
e => { console.error(e) }
)
打完自定义基座 → 真机运行,鸿蒙 6.0 实测 20 MB 包 1.3 s 解完。
方案 2.纯 JS 解压
- 安装 fflate(npm i fflate -S),勾「启用 npm 支持」。
- 代码:
import * as fflate from 'fflate'
import { readFile, writeFile } from 'uni-file-system'
async function unzipToSandbox(zipPath, targetDir) {
const zipBuffer = await readFile(zipPath) // 读成 ArrayBuffer
const zipUint8 = new Uint8Array(zipBuffer)
const files = fflate.unzipSync(zipUint8) // 同步解包
for (const [relativePath, uint8] of Object.entries(files)) {
const fullPath = `${targetDir}/${relativePath}`
await writeFile(fullPath, uint8.buffer) // 写回沙盒
}
}
// 调用
unzipToSandbox(
`${uni.env.USER_DATA_PATH}/static/test.zip`,
`${uni.env.USER_DATA_PATH}/unzip`
).then(() => console.log('JS 解压完成'))
更多关于HarmonyOS鸿蒙Next中手机系统升级到6.0了。不过之前app可以正常解压一个/static/目录下的zip文件,使用plus.zip.decompress解压文件,但一直没有反应,不知道是权限的原因,还是plus.zip.decompress这个使用不支持?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next 6.0中,plus.zip.decompress可能因系统权限策略调整或API变更导致无响应。鸿蒙Next强化了沙箱安全机制,应用默认无法直接访问/static/等系统目录。需检查以下配置:在module.json5中声明ohos.permission.WRITE_USER_STORAGE权限;确认压缩文件路径改为应用沙箱路径(如"internal://app/static/xxx.zip")。若仍无效,可能是鸿蒙Next弃用了该API,需改用@ohos.file.zlib模块的zip解压接口。
在HarmonyOS Next 6.0中,plus.zip.decompress 可能因系统权限策略变更或API兼容性问题导致解压无响应。建议检查以下方面:
- 权限配置:确认应用已申请
ohos.permission.WRITE_USER_STORAGE存储权限,并在代码中动态请求用户授权。 - 路径兼容性:HarmonyOS Next 对文件路径访问控制更严格,需使用
context.filesDir等安全路径,避免直接访问/static/目录。 - API替代方案:若
plus.zip.decompress不兼容,可尝试以下UniApp方案:- 使用 Native.js 调用HarmonyOS的
ohos.zlib模块(需自行封装桥接代码)。 - 通过 插件市场 引入第三方ZIP解压插件(如
zip-unzip)。 - 采用 前端JS库(如JSZip)解压,但仅适用于纯前端资源。
- 使用 Native.js 调用HarmonyOS的
注意:ohos.zlib 属HarmonyOS原生能力,需通过UniApp的原生扩展机制集成,非直接调用。推荐优先测试权限与路径调整,若仍无效则考虑插件或原生扩展方案。

