HarmonyOS 鸿蒙Next 相册路径要怎么变成绝对路径

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 相册路径要怎么变成绝对路径

相册路径是file://media/Photo/2/IMG_1712804096_001/IMG_*****6.jpg,要怎么变成绝对路径。

业务代码逻辑里面从相册选择图片 上传到云端服务器
相册路径是file://media/Photo/2/IMG_1712804096_001/IMG_*****6.jpg,要怎么变成绝对路径。
获取uri直接用let stream = fs.createStreamSync(filePath, “r+”);会报错,文件不存在


更多关于HarmonyOS 鸿蒙Next 相册路径要怎么变成绝对路径的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

使用ohos.file.fs功能模块对文件/目录进行操作前,需要先获取其应用沙箱路径,

这边提供一个demo参考,看是否能解决你们的问题:

import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';

import fs from '[@ohos](/user/ohos).file.fs';

import picker from '[@ohos](/user/ohos).file.picker';

[@Entry](/user/Entry)

[@Component](/user/Component)

struct Index {

  [@State](/user/State) message: string = 'Hello World';

  async photoPick() {

    try {

      let PhotoSelectOptions = new picker.PhotoSelectOptions();

      PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;

      PhotoSelectOptions.maxSelectNumber = 5;

      let photoPicker = new picker.PhotoViewPicker();

      photoPicker.select(PhotoSelectOptions)

        .then(async (PhotoSelectResult: picker.PhotoSelectResult) => {

          console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' + JSON.stringify(PhotoSelectResult));

          let file1 = fs.openSync(PhotoSelectResult.photoUris[0])

          fs.copyFileSync(file1.fd, `data/storage/el2/base/files/${file1.name}`)

          let file2 = fs.openSync(`data/storage/el2/base/files/${file1.name}`, fs.OpenMode.READ_WRITE)

          console.log(`file fd ==> ${file2.fd} | file path ==> ${file2.path}`)

          // fs.closeSync(file1)

          // fs.closeSync(file2)

        }).catch((err: BusinessError) => {

        console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));

      });

    } catch (error) {

      let err: BusinessError = error as BusinessError;

      console.error('PhotoViewPicker failed with err: ' + JSON.stringify(err));

    }

  }

  build() {

    Row() {

      Column() {

        Button(this.message)

          .fontSize(50)

          .fontWeight(FontWeight.Bold)

          .onClick(async () => {

            this.photoPick()

          })

      }

      .width('100%')

    }

    .height('100%')

  }

}

更多关于HarmonyOS 鸿蒙Next 相册路径要怎么变成绝对路径的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,将相册路径转换为绝对路径的操作通常涉及文件系统API的调用。具体实现步骤如下:

  1. 获取相册内容URI:首先,通过相册应用或媒体库API获取到图片的URI。

  2. 使用ContentResolver解析URI:利用ContentResolver类,通过query方法或openInputStream方法配合Uri.parse解析URI,获取到文件的真实路径。由于鸿蒙系统可能使用内容URI来抽象文件存储,直接解析URI为绝对路径需要利用系统提供的API进行转换。

  3. 构建绝对路径:解析URI后,通过URI的scheme、host、path等组成部分,结合系统根目录或特定存储区域路径,手动拼接成绝对路径。注意,这一步可能需要根据鸿蒙系统的具体文件系统结构进行调整。

示例代码(伪代码,因为具体实现依赖于鸿蒙API):

Uri uri = ...; // 获取到的图片URI
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, ...); // 查询URI对应的文件信息
String absolutePath = ...; // 根据查询结果构建绝对路径
cursor.close();

注意:由于鸿蒙系统的API和文件系统结构可能与Android有所差异,上述方法需要根据鸿蒙系统的开发文档进行具体实现。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部