HarmonyOS 鸿蒙Next:uri转换file后通过path再转换回uri,两个uri不一致

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

HarmonyOS 鸿蒙Next:uri转换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.app.demo/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.app.demo/Photo/2/IMG_1718855501_001

我有以下几个疑问:
1.这样的转化过程是否正确?
2.上述步骤一中获取到的图片uri和步骤三中的uri应该指向的是同一个文件吧?
3.为什么上述步骤一种的原始uri的值和步骤三中的uri值不一致?
4.上述步骤二中获取到的file的Path,是否为此文件的绝对路径,为什么没有了此文件的后缀。

2 回复

这样的转换过程是正确的,

步骤1和步骤3中的uri指向的是同一个文件,因为并没有对文件进行什么操作,文件还是在用户文件空间中;

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

步骤2里边获取到的path,并不是文件的绝对路径,一般path是不带文件后缀,uri带文件后缀。可以根据具体业务来选择

在HarmonyOS鸿蒙Next系统中,遇到URI转换到文件路径(file)后再通过该路径转换回URI时,两个URI不一致的问题,这通常是由于路径解析或URI格式处理上的差异导致的。

URI(Uniform Resource Identifier)和文件路径在操作系统中代表了资源的不同抽象层次。URI通常用于网络资源的定位,而文件路径则用于本地文件系统的导航。当URI转换为文件路径时,可能会丢失一些URI特有的信息,如协议、查询参数等,而文件路径转换为URI时,可能会根据当前环境或配置生成不同的URI字符串。

为了保持一致性,建议在转换过程中注意以下几点:

  1. 确保转换逻辑正确无误,包括正确处理URI的scheme、host、port、path、query等部分。
  2. 检查是否有文件系统权限或访问控制列表(ACL)影响了文件路径的解析。
  3. 验证URI的格式是否符合HarmonyOS鸿蒙Next系统的规范。

如果以上检查无误,但问题依旧存在,可能是由于系统内部实现细节或特定环境下的行为差异所致。此时,建议直接联系HarmonyOS鸿蒙Next的官方支持团队进行进一步的排查和解决。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部