欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【HarmonyOS学习】用户文件访问

【HarmonyOS学习】用户文件访问

2025/2/25 2:14:51 来源:https://blog.csdn.net/Oneal5354/article/details/140645168  浏览:    关键词:【HarmonyOS学习】用户文件访问

概述

文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。
应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。

用户文件访问框架

是一套提供给开发者访问和管理用户文件的基础框架。
在这里插入图片描述

文件路径Uri

分为文档类Uri和媒体文件Uri两类,需要是normal等级的应用(默认的应用是这个)调用这两个类,要不然会报没有权限的错误,官方配图如下:
在这里插入图片描述

  • 文档类:由picker拉起文件管理器选择或保存返回,以及通过fileAccess模块获取Uri。
  • 媒体文件:由picker通过拉起图库选择图片或者视频返回,通过photoAccessHelper模块获取图片或者视频文件的uri,以及通过userFileManager模块获取图片、视频或者音频文件的uri。

文档类uri获取

  • 通过DocumentViewPicker接口来选择和保存各种格式文档,返回选择或保存的文件的uri。
import { common } from '@kit.AbilityKit';
import { picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';@Entry
@Component
struct Index {build() {Column(){Button("点击文件选择器").width("80%").onClick((event: ClickEvent) => {let context = getContext(this) as common.Context;let docPicker = new picker.DocumentViewPicker(context);let opt = new picker.DocumentSelectOptions();docPicker.select(opt,(err:BusinessError,selectResult:Array<string>)=>{if (err) {console.error('错误: ' + JSON.stringify(err));return;}console.info('选择文件的uri: ' + JSON.stringify(selectResult));})})}.justifyContent(FlexAlign.Center).height('100%').width('100%')}
}
  • 通过AudioViewPicker接口来选择和保存音频类文件,返回选择或保存的文件的uri。
  • 通过PhotoViewPicker.save方法保存文件,返回保存的文件Uri

媒体类uri获取

  • 通过PhotoViewPicker.select接口来选择图片/视频和保存图片/视频,返回选择的媒体文件文件的uri。
  • 通过photoAccessHelper模块中的getAccess或createAccess接口获取媒体文件对应的uri。需要申请相册管理模块读权限’ohos.permission.READ_IMAGEVIDEO’。

用户选择图片并返回Uri案例

在这里插入图片描述
在这里插入图片描述

import { common } from '@kit.AbilityKit';
import { fileIo, picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';@Entry
@Component
struct Index {@State _uris: Array<string> = [];/*** 选择图片*/PickerImage(): void {//文档选择实例const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();//选择文档的最大数目photoSelectOptions.maxSelectNumber = 2;//过滤选择媒体文件类型为图片photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;const photoViewPicker = new photoAccessHelper.PhotoViewPicker();photoViewPicker.select(photoSelectOptions).then((selectResult: photoAccessHelper.PhotoSelectResult) => {this._uris = selectResult.photoUris;console.info('选择的文件路径:' + this._uris);}).catch((err: BusinessError) => {console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`)})}/*** 读取图片信息*/ReadImageFileIo(): void {this._uris.forEach(uri => {let file = fileIo.openSync(uri, fileIo.OpenMode.READ_ONLY);let buffer = new ArrayBuffer(4096);let readLen = fileIo.readSync(file.fd, buffer);console.info('readSync data to file succeed and buffer size is:' + readLen);fileIo.closeSync(file);});}build() {Column() {Button("点击文件选择器").width("80%").onClick((event: ClickEvent) => {let context = getContext(this) as common.Context;let docPicker = new picker.DocumentViewPicker(context);let opt = new picker.DocumentSelectOptions();docPicker.select(opt, (err: BusinessError, selectResult: Array<string>) => {if (err) {console.error('错误: ' + JSON.stringify(err));return;}console.info('选择文件的uri: ' + JSON.stringify(selectResult));})})Button("点击图片选择器").width("80%").margin({ top: 20 }).onClick(() => this.PickerImage())if (this._uris != undefined && this._uris.length > 0) {Image(this._uris[0]).width(50).height(50).margin({ top: 20 })}}.justifyContent(FlexAlign.Center).height('100%').width('100%')}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词