uni-app plus.zip.decompress 解压包含中文名的文件夹或文件的zip包失败

发布于 1周前 作者 zlyuanteng 来自 Uni-App

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文件是否损坏或路径编码问题
        }
    });
}

注意事项:

  1. 路径处理:确保路径正确,特别是使用 _www 前缀时,它指向应用的根目录。
  2. 错误处理:在实际应用中,应添加更多的错误处理逻辑,比如重试机制或用户提示。
  3. 编码问题:虽然 plus.zip.decompress 通常能处理大多数编码情况,但在某些极端情况下,可能需要手动处理文件名的编码转换。这通常涉及到读取 ZIP 文件的内容,手动解析文件名,并进行编码转换,但这已经超出了 API 的直接功能范围。
  4. 测试:在多种设备和操作系统版本上测试,以确保兼容性。

如果上述代码仍然无法解压包含中文名的 ZIP 文件,可能需要检查 ZIP 文件的生成过程,确保文件名在打包时没有发生编码损坏。

回到顶部