HarmonyOS 鸿蒙Next 通过PhotoViewPicker获取的媒体文件的uri如何转换成file的path
HarmonyOS 鸿蒙Next 通过PhotoViewPicker获取的媒体文件的uri如何转换成file的path
想通过PhotoViewPicker获取的媒体文件,
然后复制到其他文件目录下,该如何操作?
(目前不知道如何将媒体文件的Uri转为file的path,然后用fs.copy())
let uri = PhotoSelectResult.photoUris[0];
fs.open(uri, (err, file) => {
if (err) {
console.error("file open failed with error message: " + err.message + ", error code: " + err.code);
} else {
let filepath = this.context.cacheDir + '/avatar.jpg';
fs.copyFile(file.fd, filepath, () => {
//filepath
});
}
})
没有找到直接拿path的方式,我是绕了一圈先open拿到file.fd,然后再copy的
求教,删除的话要怎么操作?
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
同道中人!不知道你解决了吗?photoaccesshelper我只能获得对应的照片的uri,但是我这个应用不能保存用户图片,用完了之后需要删除,但是给我uri我无法去执行删除操作。而且nativeC++中要操作uri还不知道怎么做o(╥﹏╥)o
媒体文件不能直接 copy
试一下下面的代码
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
const imageSource : image.ImageSource = image.createImageSource(file.fd);
let imgInfo: image.ImageInfo = await imageSource.getImageInfo()
let pixelMap: PixelMap = await asset.getThumbnail(imgInfo.size)
const imagePackerApi = image.createImagePacker();
let packOpts : image.PackingOption = { format:“image/jpeg”, quality:98 };
let imgData = await imagePackerApi.packing(pixelMap, packOpts)
然后将 imgData 写入你指定的目录
在HarmonyOS中,由于安全和隐私的考虑,直接通过URI获取文件的完整路径(file path)并不被推荐或支持。通常,你应该使用ContentResolver来处理媒体文件。
对于通过PhotoViewPicker获取的媒体文件URI,你可以使用ContentResolver的openInputStream(Uri)
方法来获取文件的输入流(InputStream),进而处理文件内容。如果你确实需要文件路径用于某些特定的库或操作,可能需要考虑将文件内容复制到应用的私有存储空间,并获取该副本的路径。
如果问题依旧没法解决请加我微信,我的微信是itying888。