uni-app plus.io.conventLocalFileSystemURL("_download")方法正式打包后返回的地址无法访问文件

uni-app plus.io.conventLocalFileSystemURL("_download")方法正式打包后返回的地址无法访问文件

开发环境 版本号 项目创建方式
Windows windows11 HBuilderX
示例代码:
```params.saveDir = plus.io.convertLocalFileSystemURL("_download")

操作步骤: 调用plus.io.convertLocalFileSystemURL("_download") 使用自定义基座调试和正式打包

预期结果: 自定义基座调试
/storage/emulated/0/Android/data/com.bjyos.xunyingji/apps/UNI6DDAA76/www/_download/1762250549816
返回的照片路径可以正常显示

实际结果: 正式打包
/data/user/0/com.bjyos.xunyingji/files/apps/UNI6DDAA76/www/_download/1762250549816
返回的照片路径无法显示

bug描述: plus.io.conventLocalFileSystemURL("_download") // 文件保存目录
这个接口自定义基座调试和云打包获取的数据不一样
自定义基座调试 根据返回的地址 可以正常读取到图片
正式打包后 根据返回的地址 无法读取到图片


更多关于uni-app plus.io.conventLocalFileSystemURL("_download")方法正式打包后返回的地址无法访问文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

hello,你提到的读取图片部分的代码是什么呢?

更多关于uni-app plus.io.conventLocalFileSystemURL("_download")方法正式打包后返回的地址无法访问文件的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我购买的插件 作者说调用plus.io.convertLocalFileSystemURL("_download")方法 在基座调试是正常的 但正式打包返回的数据是有问题的

回复 q***@126.com: 具体的报错是什么呢?

没有报错 就是返回的文件路径 读取不到文件

回复 DCloud_UNI_yuhe: 基座调试可以正常读取到文件 正式打包后就读取不到了

回复 q***@126.com: 读取不到文件也是有报错信息的吧,要不然你是怎么确定读取不到文件呢?

回复 DCloud_UNI_yuhe: 我们把照片直接显示在列表里 基座调试的时候 照片显示能正常显示 正式打包后 选择照片后 列表显示都是空白的

回复 q***@126.com: 什么列表里?直接调用 chooseImage 也会出现问题吗?

这是一个典型的路径访问权限问题。在Android平台上,不同打包方式会导致应用数据存储路径的差异:

自定义基座调试时,应用运行在/storage/emulated/0/Android/data/目录下,这是外部存储空间,具有较宽松的文件访问权限。

正式打包后,应用运行在/data/user/0/目录下,这是应用的私有数据目录,其他应用无法直接访问其中的文件,导致返回的路径无法被外部直接读取。

解决方案:

  1. 使用File API读取文件
plus.io.resolveLocalFileSystemURL("_download/1762250549816", function(entry) {
    entry.file(function(file) {
        var fileReader = new plus.io.FileReader();
        fileReader.readAsDataURL(file);
        fileReader.onloadend = function(evt) {
            var base64Data = evt.target.result;
            // 使用base64Data显示图片
        };
    });
});
  1. 将文件保存到相册或公共目录
// 保存到相册
plus.gallery.save("_download/1762250549816");

// 或保存到公共下载目录
plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, function(fs) {
    fs.root.getFile("filename", {create: true}, function(fileEntry) {
        // 复制文件到公共目录
    });
});
  1. 使用uni.downloadFile管理下载文件
uni.downloadFile({
    url: 'your_file_url',
    success: (res) => {
        if (res.statusCode === 200) {
            // res.tempFilePath 可直接使用
        }
    }
});
回到顶部