HarmonyOS 鸿蒙Next 通过PhotoViewPicker获取的媒体文件的uri如何转换成file的path

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 通过PhotoViewPicker获取的媒体文件的uri如何转换成file的path

想通过PhotoViewPicker获取的媒体文件,

然后复制到其他文件目录下,该如何操作?

(目前不知道如何将媒体文件的Uri转为file的path,然后用fs.copy())

6 回复
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。

回到顶部