uniapp开发鸿蒙next 使用 getFileSystemManager 中的readFileSync 异常问题

uniapp开发鸿蒙next 使用 getFileSystemManager 中的readFileSync 异常问题

前置条件:

开发环境 版本号 项目创建方式
编辑器 HBuilder X4.71-alpha -
鸿蒙手机 nova 13 -
软件版本 5.0.1.120 -

步骤:

  1. fileSystemManager = uni.getFileSystemManager();
  2. 先选取图片后获取地址,再用 fileSystemManager.readFileSync 读取图片,报错:readFileSync:fail filePath No such file or directory;代码如下:
chooseMedia() {  
    uni.chooseMedia({  
        count: 1,  
        mediaType: ['image'],  
        sourceType: ['album'],  
        success: (res) => {   
            this.tempFilePath = res.tempFiles[0].tempFilePath;  
            try {   
                fileSystemManager.readFileSync(res.tempFiles[0].tempFilePath);   
            } catch(err) {  
                console.log('readFileSync', err)  //  
            }   
        },  
        fail: (err) => {  
            console.log('chooseMedia', err);  
        }  
    })  
},  
  1. 错误信息:readFileSync:fail filePath No such file or directory

更多关于uniapp开发鸿蒙next 使用 getFileSystemManager 中的readFileSync 异常问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

21 回复

临时的解决方案,可以将下方的 har 包 ,添加到 harmony-configs/libs 之后,重新运行
此方案是 uniapp 的解决方案,x上的见下方的附件

更多关于uniapp开发鸿蒙next 使用 getFileSystemManager 中的readFileSync 异常问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


还是提示 readFile:fail filePath No such file or directory Invalid argument ,使用的是 ,代码片段 uni.chooseImage({ count: count, sizeType: sizeType, sourceType: sourceType, success(res) { const path = res.tempFilePaths[0]; uni.getFileSystemManager().readFile({ filePath: path, // 选择图片返回的相对路径 encoding: “base64”, // 编码格式 success: (res) => { console.log(“data:image/png;base64,” + res.data); // 完整的base64字符串,包含mime和编码数据 }, fail(err) { console.log("------------------------>>>>>>", err); console.log("------------------------>>>>>>", res.tempFilePaths[0]); }, }); },

回复 b***@163.com: 删除了unpackage之后重新运行之后尝试一下呢?我这里测试是正常的

回复 DCloud_UNI_yuhe: 我使用的是 uniapp x ,目录结构我贴在最下面了,但是删除了 unpackage 还是不行

回复 b***@163.com: 这个不是x的,是uniapp 的

chooseMedia 的实现方式有差异,你使用 chooseImage 试一下

使用chooseImage 选择图片没有问题,返回的链接是(data/storage/el2/base/cache/HBuilder/uni-media/1750227489399_0.png),这个路径是可以readFileSync的,可以正常转换; 但 sourceType: [ ‘camera’] 这个问题又出现了。

回复 p***@touch-ez.com.cn: 同样的问题,请问现在解决了吗

同问 uni.chooseImage({ count: 1, sizeType: [‘compressed’], sourceType: [‘camera’], success: function (res) { console.log(JSON.stringify(res.tempFilePaths),res.tempFiles); CommonUtil.readFile(res.tempFilePaths[0]).then(res => { const realNamePhotoBase64 = res as string changeFace(realNamePhotoBase64) }) } }); 得到的路径是"file://media/Photo/452/IMG_1753341591_443/IMG_20250724_151811.jpg"

我也是报这个错误

请问有解决方法吗

请问解决没有,我也是这个问题,我试过了 ios 和安卓,都能读取到,但是鸿蒙使用拍照后就获取不到

提供了一下临时解决方案,可以看一下

这个不能解决x上的问题

回复 DCloud_UNI_yuhe: X 上面的有计划在解决吗?

回复 b***@163.com: 等后续看一下的

回复 b***@163.com: 以上传x上的临时解决方案

x项目的临时解决方案,在harmony-configs/libs上,添加如下文件

4.83-alpha 已修复

在鸿蒙Next平台上,uni.chooseMedia返回的临时文件路径可能无法直接被readFileSystemManager.readFileSync访问,这是常见的平台兼容性问题。

问题分析:

  1. 鸿蒙系统的文件沙盒机制较严格,临时文件路径可能受访问限制
  2. chooseMedia返回的路径格式可能与readFileSync期望的格式不一致

解决方案:

chooseMedia() {
    uni.chooseMedia({
        count: 1,
        mediaType: ['image'],
        sourceType: ['album'],
        success: (res) => {
            // 尝试使用base64编码读取
            uni.getFileSystemManager().readFile({
                filePath: res.tempFiles[0].tempFilePath,
                encoding: 'base64',
                success: (fileRes) => {
                    console.log('文件读取成功', fileRes.data)
                },
                fail: (err) => {
                    console.log('readFile失败', err)
                }
            })
        }
    })
}
回到顶部