HarmonyOS 鸿蒙Next PhotoPickerComponent选取的相册路径fs无法读取

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

HarmonyOS 鸿蒙Next PhotoPickerComponent选取的相册路径fs无法读取

通过PhotoPickerComponent选取的相册路径无法通过fs读取 file://media/Photo/45/IMG_XXXXX/XXXXX.png

2 回复

官方提供的demo是可以,做了简单修改:

import { PhotoPickerComponent, PickerController, PickerOptions, DataType } from '@ohos.file.PhotoPickerComponent'
import { photoAccessHelper } from '@kit.MediaLibraryKit'
import { image } from '@kit.ImageKit';
import fs from '@ohos.file.fs';

@Entry
@Component
struct Index {
  pickerOptions: PickerOptions = new PickerOptions();
  @State pickerController: PickerController = new PickerController();
  @State selectUris: Array<string> = new Array<string>();
  @State pixelMap: image.PixelMap | undefined = undefined
  
  aboutToAppear() {
    this.pickerOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    this.pickerOptions.maxSelectNumber = 10;
    this.pickerOptions.isSearchSupported = false;
    this.pickerOptions.isPhotoTakingSupported = false;
    // 其他属性.....
  }

  private onSelect(uri: string) {
    // 添加
    if (uri) {
      this.selectUris.push(uri);
    }
  }

  private onDeselect(uri: string): void {
    // 移除
    if (uri) {
      this.selectUris = this.selectUris.filter((item: string) => {
        return item != uri;
      })
    }
  }

  async getPixelMap(){
    let file = fs.openSync(this.selectUris[0], fs.OpenMode.READ_ONLY);
    this.pixelMap = await image.createImageSource(file.fd).createPixelMap();
  }

  build() {
    Stack () {
      PhotoPickerComponent({
        pickerOptions: this.pickerOptions,
        onSelect:(uri: string): void => this.onSelect(uri),
        onDeselect:(uri: string): void => this.onDeselect(uri),
        pickerController: this.pickerController,
      }).height('100%').width('100%')
      
      // 这里模拟应用侧底部的选择栏
      Column(){
        Row () {
          ForEach(this.selectUris, (uri: string) => {
            Image(uri).height('10%').width('10%').onClick(() => {
              // 点击事件模拟删除操作,通过pickerController向picker组件发送已选择的数据列表,触发picker组件勾选框刷新
              this.selectUris = this.selectUris.filter((item: string) => {
                return item != uri;
              })
              this.pickerController.setData(DataType.SET_SELECTED_URIS, this.selectUris);
            })
          }, (uri: string) => JSON.stringify(uri))
        }
        
        Button('展示图片').width(80).height(40)
          .onClick(() => {
            this.getPixelMap()
          })

        Image(this.pixelMap).width("20%").height('20%')
      }
    }
  }
}

更多关于HarmonyOS 鸿蒙Next PhotoPickerComponent选取的相册路径fs无法读取的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对帖子标题中提到的“HarmonyOS 鸿蒙Next PhotoPickerComponent选取的相册路径fs无法读取”的问题,以下是专业且直接的回答:

在HarmonyOS系统中,使用Next PhotoPickerComponent选取相册图片后,若遇到无法读取所选相册路径(fs)的情况,可能是由于以下几个原因:

  1. 权限问题:确保应用已正确申请并获得了读取存储空间的权限。在HarmonyOS中,这通常需要在manifest文件中声明相关权限,并在运行时请求用户授权。

  2. 路径格式问题:检查从PhotoPickerComponent返回的相册路径格式是否正确。有时路径可能包含非法字符或格式不正确,导致无法读取。

  3. 文件系统访问限制:某些文件或目录可能受到系统保护,无法被普通应用访问。确认所选文件或目录是否处于这样的保护状态。

  4. 组件返回问题:检查PhotoPickerComponent的实现是否有bug,导致返回的路径不正确或无法访问。

  5. 系统问题:如果以上均无误,可能是系统本身的问题或特定版本的bug。尝试更新系统或组件到最新版本。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部