在鸿蒙开发中调用系统相机拍照录制视频和使用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)
首先我们需要知道的是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...)