0
点赞
收藏
分享

微信扫一扫

【HarmonyOS】鸿蒙应用获取用户设备内文件

【HarmonyOS】鸿蒙应用获取用户设备内文件

问题背景: 应用访问用户设备内的文件(图片,视频,音频,文档文件,xx文件)等用户文件时,我们可以通过系统预置的文件选择器(FilePicker),实现该能力。

通过Picker访问相关文件,将拉起对应的应用,引导用户完成界面操作,接口本身无需申请权限。

但是picker获取的uri只具有临时权限,应用后台关闭后就失去了访问权限。

需要注意的是,官方API演进已经将图片和视频的访问,从FilePicker中移入到PhotoAccessHelper中,具体参见这篇文章:【HarmonyOS】鸿蒙中如何获取用户相册图片?photoAccessHelper.PhotoViewPicker

音频文件的访问,参见这篇文章:【HarmonyOS】鸿蒙应用获取用户设备内音频资源文件

Demo示例:

import { picker } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

/**
 * 文件选择
 */
@Entry
@Component
struct FileSelectPage {

  build() {
    RelativeContainer() {
      Text("点击唤起文件选择器")
        .fontSize(px2fp(42))
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(()=>{
          const documentSelectOptions = new picker.DocumentSelectOptions();
          // 选择文档的最大数目(可选)
          documentSelectOptions.maxSelectNumber = 5;
          // 指定选择的文件或者目录路径(可选)
          documentSelectOptions.defaultFilePathUri = "file://docs/storage/Users/currentUser/test";
          // 选择文件的后缀类型['后缀类型描述|后缀类型'](可选) 若选择项存在多个后缀名,则每一个后缀名之间用英文逗号进行分隔(可选),后缀类型名不能超过100,选择所有文件:'所有文件(*.*)|.*';
          documentSelectOptions.fileSuffixFilters = ['图片(.png, .jpg)|.png,.jpg', '文档|.txt', '视频|.mp4', '.pdf'];
          //选择是否对指定文件或目录授权,true为授权,当为true时,defaultFilePathUri为必选参数,拉起文管授权界面;false为非授权,拉起常规文管界面(可选)
          documentSelectOptions.authMode = true;

          let uris: Array<string> = [];
          let context = getContext(this) as common.Context; // 请确保 getContext(this) 返回结果为 UIAbilityContext
          // 创建文件选择器实例
          const documentViewPicker = new picker.DocumentViewPicker(context);
          documentViewPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
            //文件选择成功后,返回被选中文档的uri结果集。
            uris = documentSelectResult;
            console.info('documentViewPicker.select to file succeed and uris are:' + uris);
          }).catch((err: BusinessError) => {
            console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
          })
          
        })
    }
    .height('100%')
    .width('100%')
  }
}

举报

相关推荐

0 条评论