HarmonyOS uri转换file,通过file的path再转换回uri,两个uri不一致

let photoSelectOptions = new picker.PhotoSelectOptions();
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
photoSelectOptions.maxSelectNumber = 1;
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select(photoSelectOptions, (err: BusinessError, photoSelectResult: picker.PhotoSelectResult) => {
  if (err) {
    console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
    return;
  }
  //获取选中图片的uri
  //file://media/Photo/2/IMG_1718855501_001/IMG_001.jpg
  let uri = photoSelectResult.photoUris[0]
  //通过uri转file
  let file: fs.File = fs.openSync(uri);
  //   /Photo/2/IMG_1718855501_001
  let picPath= file.path;
  //通过fileUri再次将path转为uri
  //file://com.babytree.apps.hmpregnancy/Photo/2/IMG_1718855501_001
  fileUri.getUriFromPath(picPath)
});

以上是选择图片的demo

步骤一。把选中图片的原始uri,值为file://media/Photo/2/IMG_1718855501_001/IMG_001.jpg

步骤二。.将原始uri通过创建file的形式,获取到此file的path,值为/Photo/2/IMG_1718855501_001

步骤三。将此file的path,通过fileUri的形式再转为uri,值为file://com.babytree.apps.hmpregnancy/Photo/2/IMG_1718855501_001

我有以下几个疑问:

1.这样的转化过程是否正确?

2.上述步骤一中获取到的图片uri和步骤三中的uri应该指向的是同一个文件吧?

3.为什么上述步骤一种的原始uri的值和步骤三中的uri值不一致?

4.上述步骤二中获取到的file的Path,是否为此文件的绝对路径,为什么没有了此文件的后缀。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

这样的转换过程是正确的,步骤1和步骤3中的uri指向的是同一个文件,因为并没有对文件进行什么操作,文件还是再用户文件空间中;

步骤1和步骤3中的uri不一致是因为,步骤3里边的参数填写的应该是文件的沙箱路径,但是传进path路径不是沙箱路径,传进去的文件路径,文件还在用户空间中,所以导致两个方法返回的值不一样,步骤3方法返回的路径前缀还是com.babytree.apps.hmpregnancy开头的,就说明这个方法返回的也是应用沙箱里边的uri;

步骤2里边获取到的path,并不是文件的绝对路径,我们的path是不带文件后缀,uri带文件后缀。应该要根据自己具体业务来选择

分享
微博
QQ
微信
回复
1天前
相关问题
Path组件绘制线条粗细不一致
1947浏览 • 1回复 待解决
HarmonyOS 单位不一致问题
82浏览 • 1回复 待解决
启动和调试行为不一致
259浏览 • 1回复 待解决
依赖hsp出包,报错versionname不一致
120浏览 • 1回复 待解决
water flow 出现gap不一致问题
745浏览 • 1回复 待解决
签名不一致报错怎么回事?
2751浏览 • 1回复 待解决
window 全屏操作不同设备表现不一致
418浏览 • 1回复 待解决
napi里面,相同输入输出不一致
1711浏览 • 1回复 待解决
ArkTS开发如何比较两个string是否一致 ?
6427浏览 • 3回复 待解决