HarmonyOS掌上记账APP开发实践第50篇:Core File Kit 与文件选择器:沙箱文件管理与批量授权
050 — Core File Kit 与文件选择器沙箱文件管理与批量授权简介鸿蒙系统采用沙箱文件机制来保障用户数据安全——每个应用只能访问自己的沙箱目录访问外部文件需要通过文件选择器Picker获取用户授权。MoneyTrack 在反馈模块中完整实践了这一流程用户通过 Picker 选择图片或文件系统返回 URI 后应用通过fileUri.getUriFromPath()完成路径转换再读取文件内容进行上传。批量授权机制让用户可以一次选择多个文件并统一授权避免了逐个确认的繁琐操作。核心知识点1. 沙箱文件目录结构鸿蒙应用的沙箱路径遵循以下目录结构/data/storage/el2/base/haps/entry/files/ ← 应用文件目录 /data/storage/el2/base/haps/entry/cache/ ← 缓存目录系统可清理 /data/storage/el2/base/data/ ← 应用数据库和 SharedPreferences /data/storage/el2/base/preferences/ ← 首选项存储目录沙箱分为两个层级应用沙箱应用私有目录无需授权即可读写但数据随应用卸载而删除。用户沙箱用户公开目录如相册、下载需要通过 Picker 授权访问。2. fileUri URI 转换fileUri模块提供沙箱路径与 URI 的相互转换fileUri.getUriFromPath(path)将本地沙箱路径转换为file://协议 URI。fileUri.getPathFromUri(uri)将 URI 转换回本地路径。URI 格式的跨进程传递更为安全和标准。3. 文件选择器PickerPicker 是系统提供的标准文件选择界面核心 Picker 类型如下Picker 类型适用场景核心参数PhotoViewPicker图片/视频选择maxCount, selectTypeDocumentViewPicker文档选择PDF/Word/ExcelmaxCount, fileSuffixFiltersAudioViewPicker音频文件选择maxCountPhotoViewPicker 完整参数说明参数类型说明示例maxCountnumber最大选择数量默认 109selectTypePhotoSelectType筛选类型IMAGE、VIDEO、IMAGE_VIDEOIMAGEDocumentViewPicker用于选择文档文件支持按文件后缀筛选constdocPickernewDocumentViewPicker();constresultawaitdocPicker.select({maxCount:5,fileSuffixFilters:[.pdf,.doc,.docx]});// result 返回选中文件的 URI 列表4. PersistableURI 持久化授权Picker 返回的 URI 默认是临时授权——应用在前台运行时有效。如果需要后台或下次启动时继续访问需要通过PersistableURI机制持久化授权。持久化后应用在后续启动时无需用户再次授权即可访问这些文件。5. 文件选择→授权→URI转换→读取→上传完整流程渲染错误:Mermaid 渲染失败: Parse error on line 2: graph TD A[用户点击选择文件] -- B[调用 Pick -------------------^ Expecting SQE, DOUBLECIRCLEEND, PE, -), STADIUMEND, SUBROUTINEEND, PIPE, CYLINDEREND, DIAMOND_STOP, TAGEND, TRAPEND, INVTRAPEND, UNICODE_TEXT, TEXT, TAGSTART, got STR项目代码案例反馈模块中的上传文件处理文件路径feature_feedback组件import{photoAccessHelper}fromkit.MediaLibraryKit;import{fileUri}fromkit.CoreFileKit;import{fileIoasfs}fromkit.CoreFileKit;asyncfunctionpickAndUpload(){// 打开 Picker 选择图片constpickernewphotoAccessHelper.PhotoViewPicker();constresultawaitpicker.select({maxCount:9,// 最多选择 9 张selectType:photoAccessHelper.PhotoSelectType.IMAGE// 仅图片});for(consturiofresult.photoUris){// URI 转路径constpathfileUri.getPathFromUri(uri);// 读取文件并上传awaituploadFile(uri,path);}}asyncfunctionuploadFile(uri:string,path:string){// 使用 fs 打开文件读取内容constfilefs.openSync(path,fs.OpenMode.READ_ONLY);constbuffernewArrayBuffer(4096);fs.readSync(file.fd,buffer);fs.closeSync(file);// 通过 FormData 上传constformDatanewFormData();formData.append(file,uri);returnaxios.post(/api/feedback/upload,formData,{headers:{Content-Type:multipart/form-data}});}// 持久化授权的示例asyncfunctionpersistFileAccess(uris:string[]){constpersistentUrinewPersistableURI(uris[0]);awaitpersistentUri.persist();// 持久化授权console.info(文件访问权限已持久化);}使用 DocumentViewPicker 选择文档import{DocumentViewPicker}fromkit.CoreFileKit;asyncfunctionpickDocument(){constdocPickernewDocumentViewPicker();constresultawaitdocPicker.select({maxCount:3,fileSuffixFilters:[.pdf,.xlsx,.docx]});if(resultresult.length0){for(constdocUriofresult){constpathfileUri.getPathFromUri(docUri);// 处理文件...}}}最佳实践合理设置 maxCount根据业务需求设置最大选择数量图片上传建议 9 张以内文档选择建议 5 张以内避免一次性选择过多文件导致内存溢出。使用 selectType 过滤明确指定selectType让用户在 Picker 中只看到需要的文件类型提升选择效率。及时释放文件资源使用fs.openSync后务必在 finally 中调用fs.closeSync避免文件句柄泄漏。临时授权 vs 持久化授权大多数上传场景使用临时授权即可只有需要跨应用启动周期访问的场景如下载目录中的文件才需要 PersistableURI。URI 优先于路径传递URI 是跨进程传递的标准格式优先使用 URI 而非拼接后的路径确保兼容性和安全性。错误处理Picker 可能被用户取消返回 null或文件被删除读取失败务必做好错误处理并给出用户友好的提示。推荐参考文档Core File Kit 文件管理指南PhotoViewPicker / DocumentViewPicker API 参考PersistableURI API 参考

相关新闻

HarmonyOS掌上记账APP开发实践第49篇:App Linking Kit 应用链接:延迟拉起与深度链接场景

HarmonyOS掌上记账APP开发实践第49篇:App Linking Kit 应用链接:延迟拉起与深度链接场景

049 — App Linking Kit 应用链接:延迟拉起与深度链接场景 简介 在用户拉新和回流场景中,如何让用户从外部链接直接跳转到应用内的特定页面是关键体验。App Linking Kit 提供了强大的深度链接能力,支持"延迟拉起"——即使用户尚未…

2026/8/2 17:50:02 阅读更多 →
C2000 eHRPWM寄存器配置实战:从时基到死区,驱动电机与电源设计

C2000 eHRPWM寄存器配置实战:从时基到死区,驱动电机与电源设计

1. 从寄存器手册到实战配置:eHRPWM的核心逻辑 如果你曾经在电机控制或者电源设计的项目中,面对德州仪器(TI)C2000系列微控制器那本厚厚的技术参考手册,对着eHRPWM(增强型高分辨率脉宽调制器)的寄…

2026/7/31 18:41:09 阅读更多 →
多线程断点续传下载器设计:从状态驱动到工程实践

多线程断点续传下载器设计:从状态驱动到工程实践

最近在准备面试,发现很多公司都喜欢问“设计一个支持多线程并发下载且能断点续传的文件下载器”。第一次看到这个题目,可能会觉得这不就是开几个线程,分几块数据,然后记一下进度吗?但真正动手去设计,尤其是…

2026/8/2 6:45:29 阅读更多 →

最新新闻

VASP 6.3.2集成VTST插件编译指南:从环境配置到排错实战

VASP 6.3.2集成VTST插件编译指南:从环境配置到排错实战

1. 项目概述:当VASP遇上VTST 如果你正在计算化学或者材料模拟领域深耕,那么VASP(Vienna Ab initio Simulation Package)对你来说一定不陌生。作为第一性原理计算的行业标杆,它几乎是我们探索材料电子结构、能量、力学性…

2026/8/2 17:50:25 阅读更多 →
# 软考软件设计师题目总结 > **生成时间**: 2026年7月31日 10:23

# 软考软件设计师题目总结 > **生成时间**: 2026年7月31日 10:23

软考软件设计师题目总结生成时间: 2026年7月31日 10:23 | 距下半年考试: 约85天(10月24-27日) 本期主题: 软件测试与质量保证专题突破 数据结构算法强化(树与图) 设计模式代码实战 计算机组成原理核心计算一、2026下半年考情与…

2026/8/2 17:50:25 阅读更多 →
新手零基础建站指南:WordPress+虚拟主机快速上线个人网站

新手零基础建站指南:WordPress+虚拟主机快速上线个人网站

1. 项目概述:从零到一,手把手带你上线第一个网站 很多朋友想在网上有个自己的“小天地”,可能是分享个人作品、记录生活,或是尝试做个小型业务。但一提到“搭建网站”,就觉得这是程序员才能干的事,看到服务…

2026/8/2 17:50:25 阅读更多 →
163MusicLyrics:双平台音乐歌词解析与批量处理系统架构解析

163MusicLyrics:双平台音乐歌词解析与批量处理系统架构解析

163MusicLyrics:双平台音乐歌词解析与批量处理系统架构解析 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 163MusicLyrics是一款基于.NET技术栈构建的多平台…

2026/8/2 17:50:25 阅读更多 →
AI自主入侵真实系统事件技术复盘|Claude沙箱击穿、PyPI供应链攻击漏洞检测与防护方案

AI自主入侵真实系统事件技术复盘|Claude沙箱击穿、PyPI供应链攻击漏洞检测与防护方案

前言:打破行业认知的AI安全实测事故 2026年7月30日,Anthropic公开了一份颠覆性的内部安全复盘报告,彻底推翻了很多团队对AI红队测试、模型对齐、沙箱隔离的固有认知。团队回溯了全年累计141006次AI网络安全对抗评测,从海量测试数据…

2026/8/2 17:50:25 阅读更多 →
Inochi Creator终极指南:让2D角色动起来的开源动画编辑器

Inochi Creator终极指南:让2D角色动起来的开源动画编辑器

Inochi Creator终极指南:让2D角色动起来的开源动画编辑器 【免费下载链接】inochi-creator Inochi2D Rigging Application 项目地址: https://gitcode.com/gh_mirrors/in/inochi-creator 你是否曾经看着自己精心绘制的2D角色,希望它们能够真正&qu…

2026/8/2 17:49:24 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →