HarmonyOS Next开辟学习手册——选择用户文件

打印 上一主题 下一主题

主题 973|帖子 973|积分 2919

用户须要分享文件、生存图片、视频等用户文件时,开辟者可以通过系统预置的 文件选择器(FilePicker) ,实现该能力。通过Picker访问相关文件,将拉起对应的应用,引导用户完成界面操作,接口自己无需申请权限。picker获取的uri只具有临时权限,获取持久化权限须要通过 FilePicker设置永世授权 方式获取。
根据用户文件的常见类型,选择器(FilePicker)分别提供以下选项:


  • PhotoViewPicker :适用于图片或视频类型文件的选择与生存(该接口在后续版本不再演进)。请利用 PhotoAccessHelper的PhotoViewPicker 来选择图片文件。请利用 安全控件创建媒体资源 。
  • DocumentViewPicker :适用于文件类型文件的选择与生存。DocumentViewPicker对接的选择资源来自于FilePicker, 负责文件类型的资源管理,文件类型不区分后缀,好比欣赏器下载的图片、文档等,都属于文件类型。
  • AudioViewPicke :适用于音频类型文件的选择与生存。AudioViewPicker目前对接的选择资源来自于FilePicker。
选择图片或视频类文件

PhotoViewPicker 在后续版本不再演进,请利用 PhotoAccessHelper的PhotoViewPicker 来选择图片文件。
选择文档类文件


  • 导入选择器模块和基础文件API模块。
  1. import  { picker } from '@kit.CoreFileKit';
  2. import { fileIo as fs } from '@kit.CoreFileKit';
  3. import { common } from '@kit.AbilityKit';
  4. import { BusinessError } from '@kit.BasicServicesKit';
复制代码

  • 创建文件类型、文件选择选项实例。
  1. const documentSelectOptions = new picker.DocumentSelectOptions();
  2. // 选择文档的最大数目(可选)
  3. documentSelectOptions.maxSelectNumber = 5;
  4. // 指定选择的文件或者目录路径(可选)
  5. documentSelectOptions.defaultFilePathUri = "file://docs/storage/Users/currentUser/test";
  6. // 选择文件的后缀类型,若选择项存在多个后缀名,则每一个后缀名之间用英文逗号进行分隔(可选),后缀类型名不能超过100
  7. documentSelectOptions.fileSuffixFilters = ['.png', '.txt', '.mp4'];
  8. //选择是否对指定文件或目录授权,true为授权,当为true时,defaultFilePathUri为必选参数,拉起文管授权界面;false为非授权,拉起常规文管界面(可选)
  9. documentSelectOptions.authMode = true;
复制代码

  • 创建 文件选择器DocumentViewPicker 实例。调用 select() 接口拉起FilePicker应用界面进行文件选择。
  1. let uris: Array<string> = [];
  2. let context = getContext(this) as common.Context; // 请确保 getContext(this) 返回结果为 UIAbilityContext
  3. // 创建文件选择器实例
  4. const documentViewPicker = new picker.DocumentViewPicker(context);
  5. documentViewPicker.select(documentSelectOptions).then((documentSelectResult: Array<string>) => {
  6.   //文件选择成功后,返回被选中文档的uri结果集。
  7.   uris = documentSelectResult;
  8.   console.info('documentViewPicker.select to file succeed and uris are:' + uris);
  9. }).catch((err: BusinessError) => {
  10.   console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
  11. })
复制代码
  留意
1、利用picker获取的 select() 返回的uri权限是临时只读权限,待退出应用后台后,获取的临时权限就会失效。
2、如果想要获取持久化权限(仅在2in1装备上生效),请参考 文件持久化授权访问 。
3、开辟者可以根据效果集中uri做进一步的处理。发起界说一个全局变量生存uri。
4、如有获取元数据需求,可以通过 基础文件API 和 文件URI 根据uri获取部分文件属性信息,好比文件巨细、访问时间、修改时间、文件名、文件路径等。
  

  • 待界面从FilePicker返回后,利用 基础文件API的fs.openSync 接口通过uri打开这个文件得到文件描述符(fd)。
  1. let uri: string = '';
  2. //这里需要注意接口权限参数是fs.OpenMode.READ_ONLY。
  3. let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
  4. console.info('file fd: ' + file.fd);
复制代码

  • 通过fd利用 fs.readSync 接口读取这个文件内的数据。
  1. let buffer = new ArrayBuffer(4096);
  2. let readLen = fs.readSync(file.fd, buffer);
  3. console.info('readSync data to file succeed and buffer size is:' + readLen);
  4. //读取完成后关闭fd。
  5. fs.closeSync(file);
复制代码
选择音频类文件


  • 导入选择器模块和基础文件API模块。
  1. import  { picker } from '@kit.CoreFileKit';
  2. import { fileIo as fs } from '@kit.CoreFileKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. import { common } from '@kit.AbilityKit';
复制代码

  • 创建音频类型文件选择选项实例。
   阐明
目前AudioSelectOptions不支持参数配置,默认可以选择全部类型的用户文件。
  1. const audioSelectOptions = new picker.AudioSelectOptions();
复制代码

  • 创建 音频选择器AudioViewPicker 实例。调用 select() 接口拉起FilePicker应用界面进行文件选择。
  1. let uri: string = '';
  2. // 请确保 getContext(this) 返回结果为 UIAbilityContext
  3. let context = getContext(this) as common.Context;
  4. const audioViewPicker = new picker.AudioViewPicker(context);
  5. audioViewPicker.select(audioSelectOptions).then((audioSelectResult: Array<string>) => {
  6.   //文件选择成功后,返回被选中音频的uri结果集。
  7.   uri = audioSelectResult[0];
  8.   console.info('audioViewPicker.select to file succeed and uri is:' + uri);
  9. }).catch((err: BusinessError) => {
  10.   console.error(`Invoke audioViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
  11. })
复制代码
  留意
  1、利用picker获取的 select() 返回的uri权限是临时只读权限,待退出应用后台后,获取的临时权限就会失效。
2、如果想要获取持久化权限(仅在2in1装备上生效),请参考 文件持久化授权访问 。
3、开辟者可以根据效果集中的uri做读取文件数据操作。发起界说一个全局变量生存uri。例如通过 基础文件API 根据uri拿到音频资源的文件描述符(fd),再共同媒体服务实现音频播放的开辟,具体请参考 音频播放开辟引导 。

  • 待界面从FilePicker返回后,可以利用 基础文件API的fs.openSync 接口通过uri打开这个文件得到文件描述符(fd)。
  1. let uri: string = '';
  2. //这里需要注意接口权限参数是fs.OpenMode.READ_ONLY。
  3. let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
  4. console.info('file fd: ' + file.fd);
复制代码

  • 通过fd可以利用 基础文件API的fs.readSync 接口读取这个文件内的数据。
  1. let buffer = new ArrayBuffer(4096);
  2. let readLen = fs.readSync(file.fd, buffer);
  3. console.info('readSync data to file succeed and buffer size is:' + readLen);
  4. //读取完成后关闭fd。
  5. fs.closeSync(file);
复制代码
鸿蒙全栈开辟全新学习指南

有很多小伙伴不知道学习哪些鸿蒙开辟技能?不知道须要重点把握哪些鸿蒙应用开辟知识点?而且学习时频仍踩坑,最终浪费大量时间。所以要有一份实用的鸿蒙(HarmonyOS NEXT)学习路线与学习文档用来跟着学习是非常有须要的。
针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开辟技能的学习路线,包含了鸿蒙开辟必把握的焦点知识要点,内容有(ArkTS、ArkUI开辟组件、Stage模型、多端部署、分布式应用开辟、WebGL、元服务、OpenHarmony多媒体技能、Napi组件、OpenHarmony内核、OpenHarmony驱动开辟、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技能知识点。
本路线共分为四个阶段:

第一阶段:鸿蒙初中级开辟必备技能


第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH


第三阶段:应用开辟中高级就业技能


第四阶段:全网首发-工业级南向装备开辟就业技能:gitee.com/MNxiaona/733GH


《鸿蒙 (Harmony OS)开辟学习手册》(共计892页)

怎样快速入门?

1.根本概念
2.构建第一个ArkTS应用
3.……

开辟基础知识:gitee.com/MNxiaona/733GH

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

基于ArkTS 开辟

1.Ability开辟
2.UI开辟
3.公共变乱与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.装备管理
12.装备利用信息统计
13.DFX
14.国际化开辟
15.折叠屏系列
16.……

鸿蒙开辟面试真题(含参考答案):gitee.com/MNxiaona/733GH


鸿蒙入门讲授视频:


美团APP实战开辟讲授:gitee.com/MNxiaona/733GH


写在最后



  • 如果你觉得这篇内容对你还蛮有资助,我想约请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表