在HarmonyOS NEXT开发中鸿蒙原生和Flutter交互的时候,资源传递报错,求解?

在鸿蒙开发中调用系统相机拍照录制视频和使用picker.pick(getContext(), [picker.PickerMediaType.PHOTO],pickerProfile)选择照片视频,拿到的地址是file://com.gqsh.yunpu/data/storage/el2/base/haps/entry/files/1737015822716.tmp,然后在flutter那边通过MultipartFile.fromFile(ipath)无法通过这个路径找到文件。

Flutter侧报错日志:
01-16 16:23:46.805 17556-17654 A00000/com.gqs...erOHOS_Native com.gqsh.yunpu W flutter settings log message: 错误信息:PathNotFoundException: Cannot retrieve length of file, path = 'file://com.gqsh.yunpu/data/storage/el2/base/haps/entry/files/1737015822716.tmp' (OS Error: No such file or directory, errno = 2)

阅读 768
1 个回答

首先我们需要知道的是file://com.gqsh.yunpu/data/storage/el2/base/haps/entry/files/1737015822716.tmp,这个路径是鸿蒙应用的沙箱路径,加上你的报错,那么我们可以很明显知道了flutter这个框架中的MultipartFile.fromFile是识别不了这个鸿蒙的应用的沙箱路径的,那么我们需要将鸿蒙的应用沙箱路径转化成flutter框架中能识别的文件路径,让MultipartFile.fromFile能够上传文件

你可以试试这样 获取应用文件路径
let context = getContext(this) as common.UIAbilityContext;
let cacheDir = context.cacheDir;

// 新建一个本地应用文件
let file = fs.openSync(cacheDir + '/test.txt', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file.fd, 'upload file test');
fs.closeSync(file);看看应用的文件路径,flutter端是否能够获取到文件路径进行上传操作,也可以获取实际路径,
可以通过代码获取实际物理路径。参考文档如下(https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进