uni-app IOS下面plus.io.convertLocalFileSystemURL("_doc/test.pdf")在正式包和调试基座下面返回的路径不一致

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

uni-app IOS下面plus.io.convertLocalFileSystemURL("_doc/test.pdf")在正式包和调试基座下面返回的路径不一致

信息类别 详细信息
产品分类 HTML5+
版本号 4.36
手机系统 iOS
系统版本 iOS 18
手机厂商 苹果
手机型号 Iphone 15 Pro Max
打包方式 云端

操作步骤:

  • dev证书打的自定义调试基座,调用plus.io.convertLocalFileSystemURL("_doc/test.pdf")返回的路径为:
    file:///var/mobile/Containers/Data/Application/DFA0EF77-BECB-49EE-B22A-16B0F89DDE11/Document/Pandora/apps/UNI9360138/doc/test.pdf
    
  • dis证书打的正式包,调用plus.io.convertLocalFileSystemURL("_doc/test.pdf")返回的路径为:
    file:///var/mobile/Containers/Data/Application/DFA0EF77-BECB-49EE-B22A-16B0F89DDE11/Library/Pandora/apps/UNI9360138/doc/test.pdf
    
  • 一个在Document目录下面,一个在Library目录下面,非常奇怪。

预期结果:

  • 返回的路径应该相同

实际结果:

  • dev和dis包,返回的路径不相同

bug描述:

  • dev证书打的自定义调试基座,调用plus.io.convertLocalFileSystemURL("_doc/test.pdf")返回的路径为:
    file:///var/mobile/Containers/Data/Application/DFA0EF77-BECB-49EE-B22A-16B0F89DDE11/Document/Pandora/apps/UNI9360138/doc/test.pdf
    
  • dis证书打的正式包,调用plus.io.convertLocalFileSystemURL("_doc/test.pdf")返回的路径为:
    file:///var/mobile/Containers/Data/Application/DFA0EF77-BECB-49EE-B22A-16B0F89DDE11/Library/Pandora/apps/UNI9360138/doc/test.pdf
    
  • 一个在Document目录下面,一个在Library目录下面,非常奇怪。

2 回复

是Documents哈,少写了一个s


在uni-app开发中,遇到 plus.io.convertLocalFileSystemURL 在 IOS 平台正式包和调试基座下返回路径不一致的问题,通常是由于环境差异导致的。plus.io.convertLocalFileSystemURL 方法用于将本地文件系统 URL 转换为本地文件路径,但在不同环境下(如正式包和调试基座),其处理逻辑和返回的路径可能会有所不同。

以下是一个示例代码,展示了如何在 uni-app 中处理本地文件路径,并尝试解决路径不一致的问题。需要注意的是,由于我们无法直接修改 plus API 的内部行为,因此主要通过条件判断和路径处理来适应不同的环境。

// 引入必要的模块
const fs = plus.io.FileSystemObject;

// 定义一个函数来处理路径转换
function getLocalFilePath(fileSystemUrl) {
    let localPath;
    try {
        // 尝试转换路径
        localPath = plus.io.convertLocalFileSystemURL(fileSystemUrl);
        
        // 在 IOS 环境下,正式包和调试基座返回的路径可能不一致
        // 这里我们可以根据环境做一些特殊处理
        if (plus.os.name === 'iOS') {
            // 判断是否为正式包(这里假设正式包和调试基座的环境变量不同)
            const isRelease = plus.runtime.environment === 'release';
            if (isRelease) {
                // 正式包下可能需要对路径进行特殊处理
                // 例如:添加前缀或后缀,或者进行路径拼接
                // 示例:假设正式包返回的路径缺少某个前缀
                localPath = `/private/var/mobile/Containers/Data/Application/${someAppId}/${localPath.substring(localPath.indexOf('/') + 1)}`;
            } else {
                // 调试基座下可能不需要特殊处理
                // 可以直接使用转换后的路径
            }
        }
    } catch (error) {
        console.error('Error converting local file system URL:', error);
    }
    return localPath;
}

// 使用示例
const fileSystemUrl = '_doc/test.pdf';
const filePath = getLocalFilePath(fileSystemUrl);
console.log('Local file path:', filePath);

注意

  1. 上述代码中的 someAppId 是一个占位符,实际使用时需要替换为具体的 App ID 或通过其他方式获取。
  2. 在正式环境中,路径的处理可能需要根据具体情况进行调整,比如根据实际的文件存储位置或应用沙盒结构进行修改。
  3. 由于 IOS 平台的限制和安全性考虑,正式包和调试基座在文件访问权限上可能存在差异,这也是导致路径不一致的一个原因。

希望以上代码示例能够帮助你更好地处理路径不一致的问题。在实际应用中,建议根据具体的需求和环境进行路径的适配和处理。

回到顶部