1 关键字

filePicker;mediaLibrary;fileAssets;获取文件名称

2 需求背景

在使用filePicker选择文件时,得到的只有选中文件的uri;而业务需求是同时需要获取文件名称,此时则需要搭配mediaLibrary来获取文件名称。

3 实现步骤

  • 1、通过filePicker选择文件,得到选中文件的uri;
    // 以documentPicker为例
    let documentPicker = new picker.DocumentViewPicker();
      documentPicker.select()
        .then((values) => {
          // 将选中的第一个文件作为示例
          this.selectedUri = values[0];
          console.log(`myLog documentPicker select success, selectedUri: ${JSON.stringify(values)}`);
        })
        .catch((err) => {
          console.log(`myLog documentPicker select fail, err: ${JSON.stringify(err)}`);
        })
    

img

  • 2、获取mediaLibrary实例,建议在定义变量时获取;

    private library: mediaLibrary.MediaLibrary = mediaLibrary.getMediaLibrary(getContext());
    
  • 3、通过mediaLibrary实例获取fetchFileResult;注:调用此方法需要ohos.permission.READ_MEDIA权限(授权类型为用户授权)

    this.library.getFileAssets({
        selections: mediaLibrary.FileKey.MEDIA_TYPE + '= ?',
        // 以图片类型为例,不同文件类型选择不同的MediaType
        selectionArgs: [mediaLibrary.MediaType.IMAGE.toString()]
      })
        .then((fetchFileResult) => {
          this.fetchFileResult = fetchFileResult;
          console.log(`myLog getFileAssets success`);
        })
        .catch((err) => {
          console.log(`myLog getFileAssets fail, err: ${JSON.stringify(err)}`);
        })
    

img

  • 4、通过fetchFileResult获取所有的fileAssets;
    this.fetchFileResult.getAllObject()
        .then((fileAssets) => {
          this.fileAssets = fileAssets;
          console.log(`myLog getAllObject success, fileAsset count: ${fileAssets.length}`);
        })
        .catch((err) => {
          console.log(`myLog getAllObject fail, err: ${JSON.stringify(err)}`);
        })
    

img

  • 5、通过遍历获取到的所有文件,对比文件的uri,得到选中的文件名称
    for(let i = 0; i < this.fileAssets.length; i++){
        if(this.selectedUri === this.fileAssets[i].uri){
          console.log(`myLog selected file name: ${JSON.stringify(this.fileAssets[i].displayName)}`);
        }
      }
    

img

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐