uniapp开发鸿蒙next 使用 getFileSystemManager 中的readFileSync 异常问题
uniapp开发鸿蒙next 使用 getFileSystemManager 中的readFileSync 异常问题
前置条件:
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| 编辑器 | HBuilder X4.71-alpha | - |
| 鸿蒙手机 | nova 13 | - |
| 软件版本 | 5.0.1.120 | - |
步骤:
fileSystemManager = uni.getFileSystemManager();- 先选取图片后获取地址,再用
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);
}
})
},
- 错误信息:
readFileSync:fail filePath No such file or directory
更多关于uniapp开发鸿蒙next 使用 getFileSystemManager 中的readFileSync 异常问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
临时的解决方案,可以将下方的 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 的
使用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访问,这是常见的平台兼容性问题。
问题分析:
- 鸿蒙系统的文件沙盒机制较严格,临时文件路径可能受访问限制
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)
}
})
}
})
}



