uni-app 【报Bug】plus.io.convertLocalFileSystemURL打包后读取的目录无法载入到img中

uni-app 【报Bug】plus.io.convertLocalFileSystemURL打包后读取的目录无法载入到img中

开发环境 版本号 项目创建方式
PC WIN7 64位 -
手机 iOS 12.4 -
手机厂商 苹果 -
手机机型 6 -
打包方式 云端 -

产品分类:HTML5+

操作步骤:

qidong.src= plus.io.convertLocalFileSystemURL("_doc/images/ded8d01a343ad11fd10d6933013a045c.jpg");

预期结果:

file:///var/mobile/Containers/Data/Application/8201AC7B-0F40-4043-80CD-5C162C107DDD/Documents/Pandora/apps/HBuilder/doc/images/ded8d01a343ad11fd10d6933013a045c.jpg

实际结果:

file:///var/mobile/Containers/Data/Application/4B8B3F5D-2751-4037-923D-76C10145062D/Library/Pandora/apps/bigshengzhou/doc/images/ded8d01a343ad11fd10d6933013a045c.jpg

bug描述:

qidong.src= plus.io.convertLocalFileSystemURL("_doc/images/ded8d01a343ad11fd10d6933013a045c.jpg");
标准运行基座返回值:
file:///var/mobile/Containers/Data/Application/8201AC7B-0F40-4043-80CD-5C162C107DDD/Documents/Pandora/apps/HBuilder/doc/images/ded8d01a343ad11fd10d6933013a045c.jpg  

自定义调试基座返回值:
file:///var/mobile/Containers/Data/Application/AACD1215-2988-4F67-849E-DD2B35ABFD3A/Documents/Pandora/apps/bigshengzhou/doc/images/ded8d01a343ad11fd10d6933013a045c.jpg  

打包后返回值:  
file:///var/mobile/Containers/Data/Application/4B8B3F5D-2751-4037-923D-76C10145062D/Library/Pandora/apps/bigshengzhou/doc/images/ded8d01a343ad11fd10d6933013a045c.jpg  

var temp_img = new Image();
temp_img.src = qidong.src ;

temp_img.onerror = function(){
console.log("错误");
}
此处载入失败,但以下代码能找到
plus.io.resolveLocalFileSystemURL(qidong.src,function(entry){
alert("找到");
},function(e){
alert("没有");
});

更多关于uni-app 【报Bug】plus.io.convertLocalFileSystemURL打包后读取的目录无法载入到img中的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 【报Bug】plus.io.convertLocalFileSystemURL打包后读取的目录无法载入到img中的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的路径转换问题。plus.io.convertLocalFileSystemURL 在不同运行环境下返回的路径确实会有差异,这属于正常现象。

关键问题在于:打包后的路径指向了 Library 目录而非 Documents 目录。iOS 的沙盒机制中,Library 目录下的文件默认无法通过 file:// 协议直接访问,特别是用于 img 标签的 src 属性时。

解决方案:

  1. 使用相对路径或 base64: 对于图片资源,建议将文件读取为 base64 格式:

    plus.io.resolveLocalFileSystemURL("_doc/images/ded8d01a343ad11fd10d6933013a045c.jpg", function(entry){
        entry.file(function(file){
            var reader = new plus.io.FileReader();
            reader.readAsDataURL(file);
            reader.onloadend = function(e){
                qidong.src = e.target.result; // 直接使用base64数据
            }
        });
    });
    
  2. 使用 uni-app 封装的方法: 如果使用 uni-app 框架,推荐使用统一的 API:

    // 使用uni.getFileSystemManager()
    const fs = uni.getFileSystemManager();
    fs.readFile({
        filePath: '_doc/images/ded8d01a343ad11fd10d6933013a045c.jpg',
        encoding: 'base64',
        success: (res) => {
            qidong.src = 'data:image/jpeg;base64,' + res.data;
        }
    });
回到顶部