HarmonyOS鸿蒙Next中0.77的RN能用<Image source={{ uri: **}} />的方式获取沙箱里面的图片吗

HarmonyOS鸿蒙Next中0.77的RN能用<Image source={{ uri: **}} />的方式获取沙箱里面的图片吗 0.77的RN能用<lmage source={{ uri: **}} />的方式获取沙箱里面的图片吗

5 回复

尊敬的开发者,可以使用以下方式

<Image source={{uri: 'file:///data/storage/el2/base/haps/entry/files/icon.png'}} />

更多关于HarmonyOS鸿蒙Next中0.77的RN能用<Image source={{ uri: **}} />的方式获取沙箱里面的图片吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


补充一个关键点:0.77 的 RN 可以用 <Image source={{ uri }} /> 展示沙箱图片,但不建议直接把 /data/storage/… 这种物理路径塞进去。更稳的做法是先在 HarmonyOS Native/ArkTS 侧把应用沙箱路径转成组件可识别的 file URI,再传给 RN。

示例思路:

import { fileUri } from '@kit.CoreFileKit';

const path = getContext(this).filesDir + '/avatar.png';
const imageUri = fileUri.getUriFromPath(path);
// 把 imageUri 传给 RN

RN 侧:

<Image
  source={{ uri: imageUri }}
  style={{ width: 120, height: 120 }}
/>

排查时我一般看三点:第一,文件是否真的已经写入当前应用沙箱,可以先用 fs.access/open 校验;第二,Image 收到的是转换后的 URI,不是原始绝对路径;第三,如果图片来自相册或其他应用,那属于 picker/media URI,不能按自己应用 filesDir 的路径去拼。小图也可以临时走 base64,但头像、缓存图、拍照结果这类还是文件 URI 更合适。

参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-file-fileuri

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-image

给你一个官方的说明:

Image组件不能直接传入应用沙箱路径,需要传入应用沙箱URI。

  1. 参考fileUri模块示例代码,获取文件的沙箱路径。
  2. 然后调用fileUri.getUriFromPath方法将沙箱路径转化为沙箱URI,传入之后即可正常显示沙箱图片。

参考链接

[@ohos.file.fileuri (文件URI)](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-file-fileuri)

在HarmonyOS Next的RN 0.77中,<Image source={{ uri: ... }}> 不支持直接传入沙箱路径。需使用 file:// 协议前缀或通过原生桥接模块(如 @react-native-oh-tpl/ohos-file-access)将沙箱文件转换为可访问URI。直接传递沙箱路径不会渲染。

在 HarmonyOS Next 中,RN 0.77 版本可以使用 file:// 协议的 URI 访问沙箱内的图片。只需将图片的绝对路径拼成 file:// 格式传入 <Image>source={{ uri: 'file:///data/storage/el2/base/...' }} 即可显示,前提是应用拥有对沙箱路径的读取权限,且路径有效。注意:路径需为应用沙箱可访问的绝对路径,不能使用相对路径或 content:// 等方式。

回到顶部