HarmonyOS Next开发学习手册——保存用户文件

在从网络下载文件到本地、或将已有用户文件另存为新的文件路径等场景下,需要使用FilePicker提供的保存用户文件的能力。picker获取的uri只具有临时权限,获取持久化权限需要通过 FilePicker设置永久授权 方式获取。

对音频、图片、视频、文档类文件的保存操作类似,均通过调用对应picker的save()接口并传入对应的saveOptions来实现。通过Picker访问相关文件,无需申请权限。

当前所有picker的save接口都是用户可感知的,具体行为是拉起FilePicker, 将文件保存在系统文件管理器管理的特定目录,与图库管理的资源隔离,无法在图库中看到。

如需要在图库中看到所保存的图片、视频资源,请使用用户无感的 安全控件创建媒体资源 。

保存图片或视频类文件

PhotoViewPicker 在后续版本不再演进,请使用 安全控件创建媒体资源 。

保存文档类文件

  1. 导入选择器模块和基础文件API模块。
import { picker } from '@kit.CoreFileKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { common } from '@kit.AbilityKit';
  1. 创建文档保存选项实例。
// 创建文件管理器选项实例
const documentSaveOptions = new picker.DocumentSaveOptions();
// 保存文件名(可选) 
documentSaveOptions.newFileNames = ["DocumentViewPicker01.txt"];
// 保存文件类型(可选) 
documentSaveOptions.fileSuffixChoices = ['.png', '.txt', '.mp4']; 
  1. 创建 文件选择器DocumentViewPicker 实例。调用 save() 接口拉起FilePicker界面进行文件保存。
let uris: Array<string> = [];
// 请确保 getContext(this) 返回结果为 UIAbilityContext
let context = getContext(this) as common.Context;
// 创建文件选择器实例。
const documentViewPicker = new picker.DocumentViewPicker(context);
//用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的uri。
documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
  uris = documentSaveResult;
  console.info('documentViewPicker.save to file succeed and uris are:' + uris);
}).catch((err: BusinessError) => {
  console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
})

注意
1、不能在picker的回调里直接使用此uri进行打开文件操作,需要定义一个全局变量保存URI。
2、使用picker的 save() 接口获取到URI的权限是临时读写权限,待退出应用后台后,获取的临时权限就会失效。
3、如果想要获取持久化权限(仅在2in1设备上生效),请参考 文件持久化授权访问。
4、可以通过便捷方式,

### 鸿蒙开发学习路径与资源 鸿蒙HarmonyOS)作为一款面向未来的全场景分布式操作系统,提供了丰富的学习资源和技术支持。以下是关于鸿蒙开发学习的一些重要方向和参考资料: #### 一、基础理论与核心概念 鸿蒙系统的开发涉及多个关键技术点,包括但不限于分布式能力、设备协同、一次开发多端部署以及原子化服务等[^3]。这些特性使得开发者能够更高效地构建适用于多种终端的应用程序。 - **分布式能力**:允许不同类型的硬件设备之间实现无缝协作,比如手机可以轻松调用智能手表或者电视的摄像头功能。 - **设备协同**:通过统一的操作界面和服务框架,让用户的体验更加流畅自然。 - **一次开发,多端部署**:借助自适应布局技术和标准化接口设计,减少重复劳动成本的同时提高了兼容性和扩展性。 - **原子化服务**:提供轻量化解决方案,使某些特定任务无需完整应用程序即可完成操作。 #### 二、官方文档与其他权威资料 对于初学者而言,深入理解官方文档是非常必要的第一步。以下列举了一些重要的在线资源供参考: 1. **HarmonyOS开发者官网** - 地址: https://developer.harmonyos.com/ - 推荐章节: - *《快速入门》*: 提供了一个概览性的介绍,帮助新手迅速了解整个生态体系及其运作机制. - *《ArkTS语言入门》*: ArkTS 是当前推荐使用的脚本语言之一,在此部分可以获得详尽的语言特性和编码技巧指导. - *《DevEco Studio 使用指南》*: DevEco Studio 是专门为 HarmonyOS 应用而定制集成开发环境(IDE),该手册详细描述了它的各项主要功能. 2. **其他补充材料** - 参考由社区成员分享的经验总结文章或书籍;例如,《纯血版华为鸿蒙(Harmony OS)开发手册》,它包含了超过890页的内容覆盖从基础知识到高级主题的所有方面[^1]. #### 三、实践演练——动手做项目 除了理论知识外,实际动手练习也是不可或缺的一环。这里给出几个典型的例子来引导你逐步掌握技能: ##### HelloWorld 案例分析 这是每一个编程爱好者都会经历的经典入门课题。“Hello World!”不仅展示了最简单的输出语句如何工作,还揭示了许多隐藏在其背后的原理,如项目的整体架构组成(config.json配置文件的作用)[^2]. ```javascript // config.json 示例片段 { "app": { "bundleName": "com.example.helloworld", "version": { "code": 1, "name": "1.0" } }, ... } ``` ##### 页面跳转逻辑实现 当用户点击按钮触发事件后应该导航至另一个视图页面时,则需要用到路由管理器等相关API函数来进行处理. 下面是一个简化后的伪代码表示形式: ```typescript @Entry @Component struct MainPage { build() { Column() { Button('Go to Next Page') .onClick(() => router.push({ uri: 'pages:SecondPage' })) }.width('100%').height('100%') } } ``` 以上仅展示了一部分内容结构样式调整方法论的一部分而已; 更加复杂的业务需求可能还需要考虑状态保持等问题解决办法才行哦! --- ### 工具准备与环境搭建 要顺利开展基于HarmonyOS平台上的软件工程活动之前,先得确保本地计算机已经正确设置了所需的软硬件条件。主要包括以下几个步骤: 1. 下载并安装最新版本号对应的 `DevEco Studio` IDE 软件包; 2. 根据提示完成账户关联验证过程 (包括注册账号及实名制审核); 3. 导入目标模拟器镜像文件以便测试运行效果; 更多细节请参照具体教程说明文档查阅相关内容项下的指引信息[^2]. ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值