【HarmonyOS Next开发】用户文件访问

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


概述

文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。

应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。

用户文件访问框架

是一套提供给开发者访问和管理用户文件的基础框架。

文件路径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%')
  }
}


相关文章
|
4月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
582 64
|
4月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
548 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
478 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
895 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
4月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
257 0
|
5月前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
244 1
|
5月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
773 0
|
8月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
7月前
|
安全 JavaScript API
鸿蒙开发核心要素
鸿蒙开发核心要素
|
8月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
293 0

热门文章

最新文章