uni-app plus.zip.decompress 解压包含中文名的文件夹或文件的zip包失败
uni-app plus.zip.decompress 解压包含中文名的文件夹或文件的zip包失败
信息类别 | 信息内容 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC版本号 | win10 |
HBuilderX | 正式 |
HBuilderX版本 | 4.29 |
手机系统 | Android |
手机版本号 | Android 10 |
手机厂商 | 模拟器 |
手机机型 | 小新Pad pro 12.7(晓龙版) |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
操作步骤:
- 调用download下载zip文件,然后调用plus.zip.decompress 去解压
预期结果:
- zip包里面有中文名的文件和文件夹应该要支持的。比较平台是针对中国的。
实际结果:
- 实际结果是 zip包里面有中文名的文件或者文件夹,会提示 code: 2 message: “MALFORMED[1]”
bug描述:
- plus.zip.decompress zip文件包里面是有中文名的文件夹或者文件,解压失败。
1 回复
在处理 uni-app
中使用 plus.zip.decompress
解压包含中文名的文件夹或文件的 ZIP 包失败的问题时,通常这是由于编码问题或者文件路径处理不当导致的。以下是一个示例代码,展示了如何在 uni-app
中使用 plus.zip.decompress
方法解压 ZIP 文件,同时确保中文路径处理正确。
首先,确保你已经有一个 ZIP 文件,其中包含中文命名的文件夹或文件。接下来,使用以下代码进行解压:
// 假设ZIP文件路径为'path/to/your/file.zip',目标解压路径为'path/to/unzip/'
const zipFilePath = '_www/path/to/your/file.zip'; // 注意:路径需根据实际项目调整,_www表示应用根目录
const unzipToPath = '_www/path/to/unzip/';
// 检查目标路径是否存在,不存在则创建
if (!plus.io.resolveLocalFileSystemURL(unzipToPath, entry => {
if (entry.isDirectory) {
// 目标路径已存在,直接解压
decompressZip();
} else {
// 目标路径不存在,创建目录
plus.io.requestFileSystem(plus.io.LOCAL_FILE_SYSTEM, 0, fs => {
fs.root.getDirectory(unzipToPath.substring(1), {create: true}, dirEntry => {
decompressZip();
}, err => {
console.error('创建解压目录失败:', err);
});
}, err => {
console.error('请求文件系统失败:', err);
});
}
}, err => {
console.error('解析路径失败:', err);
}));
function decompressZip() {
plus.zip.decompress(zipFilePath, unzipToPath, {
success: (e) => {
console.log('解压成功:', e);
},
fail: (e) => {
console.error('解压失败:', e);
// 可尝试手动处理编码问题,但通常plus API已处理大多数情况
// 如果失败,检查ZIP文件是否损坏或路径编码问题
}
});
}
注意事项:
- 路径处理:确保路径正确,特别是使用
_www
前缀时,它指向应用的根目录。 - 错误处理:在实际应用中,应添加更多的错误处理逻辑,比如重试机制或用户提示。
- 编码问题:虽然
plus.zip.decompress
通常能处理大多数编码情况,但在某些极端情况下,可能需要手动处理文件名的编码转换。这通常涉及到读取 ZIP 文件的内容,手动解析文件名,并进行编码转换,但这已经超出了 API 的直接功能范围。 - 测试:在多种设备和操作系统版本上测试,以确保兼容性。
如果上述代码仍然无法解压包含中文名的 ZIP 文件,可能需要检查 ZIP 文件的生成过程,确保文件名在打包时没有发生编码损坏。