uni-app 【报Bug】plus.io.resolveLocalFileSystemURL 方法在APP首次启动时无法读取绝对路径和相对路径的视频和图片 重新启动APP后能正常读取

uni-app 【报Bug】plus.io.resolveLocalFileSystemURL 方法在APP首次启动时无法读取绝对路径和相对路径的视频和图片 重新启动APP后能正常读取

示例代码:

const data = await new Promise((r,j)=>{  
    plus.io.resolveLocalFileSystemURL(url,function(entry){  
        entry.file(function(file){  
            const reader = new plus.io.FileReader()  
            reader.readAsDataURL(file)  
            reader.onloadend = (e)=>{  
                let s = e.target.result    
                s = s.replace(/^data:[^;]+;base64,/, '')    
                s = uni.base64ToArrayBuffer(s)   
                r(s)   
            }  
            reader.onerror = (e)=>{  
                j(e)  
            }  
        })  
    },function(e){  
        plus.nativeUI.toast(e.message)  
        j(e)  
    })  
}) 

操作步骤:

任意页面选择图片或视频,通过plus.io.resolveLocalFileSystemURL进行读取文件,将URL编码转成arraybuffer对象,只有APP第一次启动才会出现无响应,第二次之后进入APP,就能正常读取文件转arraybuffer

预期结果:

plus.io.resolveLocalFileSystemURL正常读取文件

实际结果:

plus.io.resolveLocalFileSystemURL第一次无任何响应

bug描述:

APP第一次启动时,使用uni.chooseImage和uni.chooseVideo选择图片或视频,无论图片或视频是否压缩(chooseImage:sizeType: [‘original’,‘compressed’]、chooseVideo:compressed: true),获取的上传路径,通过plus.io.resolveLocalFileSystemURL( url, succesCB, errorCB )都无响应,无成功回调,无报错提示


更多关于uni-app 【报Bug】plus.io.resolveLocalFileSystemURL 方法在APP首次启动时无法读取绝对路径和相对路径的视频和图片 重新启动APP后能正常读取的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

更多关于uni-app 【报Bug】plus.io.resolveLocalFileSystemURL 方法在APP首次启动时无法读取绝对路径和相对路径的视频和图片 重新启动APP后能正常读取的实战教程也可以访问 https://www.itying.com/category-93-b0.html


遇到同样的问题了,请问解决了吗?

在使用 uni-app 开发时,plus.io.resolveLocalFileSystemURL 方法在首次启动时无法读取绝对路径和相对路径的视频和图片,但在重新启动 APP 后能正常读取,这可能是由于以下原因导致的:

可能的原因

  1. 文件系统未完全初始化:在 APP 首次启动时,文件系统可能还未完全初始化,导致无法正确解析文件路径。
  2. 权限问题:首次启动时,某些权限可能还未被正确获取或初始化,导致文件读取失败。
  3. 缓存问题:首次启动时,文件路径的缓存可能还未生成,导致无法正确解析路径。
  4. 异步加载问题:某些资源可能在首次启动时还未完全加载完成,导致文件读取失败。

解决方案

  1. 延迟执行:在首次启动时,可以尝试延迟执行 resolveLocalFileSystemURL 方法,确保文件系统已经初始化完成。

    setTimeout(() => {
        plus.io.resolveLocalFileSystemURL(path, function(entry) {
            // 处理文件
        }, function(error) {
            console.error("文件读取失败: " + error.message);
        });
    }, 1000); // 延迟1秒执行
    
  2. 检查权限:确保在首次启动时,所有必要的权限已经被正确获取。可以使用 plus.android.requestPermissions 来请求权限。

    plus.android.requestPermissions(["android.permission.READ_EXTERNAL_STORAGE"], function(result) {
        if (result.denied.length > 0) {
            console.error("权限被拒绝");
        } else {
            // 权限已获取,继续执行文件读取操作
        }
    });
    
  3. 使用绝对路径:确保在首次启动时,使用的是绝对路径而不是相对路径。相对路径可能在首次启动时无法正确解析。

    var absolutePath = plus.io.convertLocalFileSystemURL("relative/path/to/file");
    plus.io.resolveLocalFileSystemURL(absolutePath, function(entry) {
        // 处理文件
    }, function(error) {
        console.error("文件读取失败: " + error.message);
    });
    
  4. 检查文件是否存在:在首次启动时,可以先检查文件是否存在,确保文件路径正确。

    plus.io.resolveLocalFileSystemURL(path, function(entry) {
        if (entry.isFile) {
            // 文件存在,继续处理
        } else {
            console.error("文件不存在");
        }
    }, function(error) {
        console.error("文件读取失败: " + error.message);
    });
回到顶部