【HarmonyOS NEXT】实现保存base64图片到图库
上篇文章介绍了HarmonyOS NEXT如何保存base64文件到download目录下,本次介绍如何保存base64图片到图库,网络图片保存方式大同小异,先下载图片,然后再保存
phAccessHelper.showAssetsCreationDialog
参考官方文档’
@ohos.file.photoAccessHelper (相册管理模块)-ArkTS API-Media Library Kit(媒体文件管理服务)-媒体 - 华为HarmonyOS开发者 (huawei.com)
完整代码如下
//模拟数据param ="{\"dataBase64\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4QAAACiCAYAAAAZUwONAAAAAXNSR0IArs4c6QAAHWFJREFUeF7t3QusHFX9B/CDQdKqYCwiggELpjFS8IGaohXaYgCDBnxUbCUVovUFCKQxGvFZXokYIygGBTWFGGpiqtCYCohiiVURREUoj6YRW6BYKU2lAq0x/ec3cfY/d9m9u927OzO98znJTXt3Z+ac85lTki/nzJy9du3atSspBAgQIECAAAECBAgQINA4gb0Ewsbdcx0mQIAAAQIECBAgQIBAJiAQGggECBAgQIAAAQIECBBoqIBA2NAbr9sECBAgQIAAAQIECBAQCI0BAgQIECBAgAABAgQINFRAIGzojddtAgQIECBAgAABAgQICITGAAECBAgQIECAAAECBBoqIBA29MbrNgECBAgQIECAAAECBARCY4AAAQIECBAgQIAAAQINFRAIG3rjdZsAAQIECBAgQIAAAQICoTFAgAABAgQIECBAgACBhgoIhA298bpNgAABAgQIECBAgAABgdAYIECAAAECBAgQIECAQEMFBMKG3njdJkCAAAECBAgQIECAgEBoDBAgQIAAAQIECBAgQKChAgJhQ2+8bhMgQIAAAQIECBAgQEAgNAYIECBAgAABAgQIECDQUAGBsKE3XrcJECBAgAABAgQIECAgEBoDBAgQIECAAAECBAgQaKiAQNjQG6/bBAgQIECAAAECBAgQEAiNAQIECBAgQIAAAQIECDRUQCBs6I3XbQIECBAgQIAAAQIECAiExgABAgQIECBAgAABAgQaKiAQNvTG6zYBAgQIECBAgAABAgQEQmOAAAECBAgQIECAAAECDRUQCBt643WbAAECBAgQIECAAAECAqExQIAAAQIECBAgQIAAgYYKCIQNvfG6TYAAAQIECBAgQIAAAYHQGCBAgAABAgQIECBAgEBDBQTCht543SZAgAABAgQIECBAgIBAaAwQIECAAAECBAgQIECgoQICYUNvvG4TIECAAAECBAgQIEBAIDQGCBAgQIAAAQIECBAg0FABgbChN163CRAgQIAAAQIECBAgIBAaAwQIECBAgAABAgQIEGiogEDY0Buv2wQIECBAgAABAgQIEBAIazoGfvrTn6ZHHnkkfepTn6ppCzWLAAECBAgQIECAAIE9XUAgrOkdjEB4//33pwsuuKCmLdQsAgQIECBAgAABAgT2dAGBsKZ3UCCs6Y3RLAIECBAgQIAAAQKTSEAgrOnNrEMg3LBhQ/rRj36UfvnLX6aHHnoobd26NU2fPj3NmTMnLVy4MB1zzDFd9bZs2ZKWL1+ebrjhhvTAAw+kKVOmpNe97nVpwYIF6T3veU/ae++9ayqvWQQIECBAgAABAgSaIyAQ1vReVx0II8h96EMfSk899VQm9OEPfzi9/OUvT9dee2169NFHs88uvfTS9LnPfe45gmvXrk3vf//7U/wZZfbs2Wn79u3pL3/5S/Z7fPeDH/wgvehFL6qpvmYRIECAAAECBAgQaIaAQFjT+1xlIIxnF48++uj07LPPZjrXXHNNWrx4cfb3Bx98ML3lLW/JZguj3HLLLemEE05oKW7bti3NnTs3/fnPf84++/znP58uuuiitHPnzrRo0aL04x//OPs8XpbzzW9+s6b6mkWAAAECBAgQIECgGQICYU3vc5WB8Etf+lIW4qK84AUvSE888USaOnVqSypCXswORjnjjDPSsmXLWt9dddVV6ayzzsp+f/7zn582btyYDjzwwOz33/zmN+nYY49tHRszhq997Wtregc0iwABAgQIECBAgMDkFxAIa3qPqwyEp556alq5cmUmc9RRR6V77rlnjFI8G/jBD34w++xNb3pTuvPOO1vfv/71r28tDT3uuOPS6tWrW9/FstF999239Xu8QfWSSy6p6R3QLAIECBAgQIAAAQKTX0AgrOk9rjIQxgtj4mUyUSLAPfnkk2NeAhPPEZ555pnZ9/GCmJ/85CfZ3x9++OF02GGHtUTPOeec9K1vfWuMcATMe++9N/vsyCOPzMLmXnvtVdO7oFkECBAgQIAAAQIEJreAQFjT+1tlILzsssvSZz/72ZZMPPc3f/781u8f+9jHsucKo8Ry0Vg2GuXWW28d8zzhxRdfnD1DWCzvfOc706pVq1of/fOf/0wvfelLa3oXNIsAAQIECBAgQIDA5BYQCGt6f/sJhL/+9a/TvHnz+u7B448/3nqeb7yTHnvssezZvtg6IkrMEl599dXZ20Ej9L3jHe/IPv/EJz6RzQDmW0hcd911rXAY319++eXpvPPOG1PV6aefnq6//vrWZ3/6059SLDNVCBAgQIAAAQIECBAoX0AgLN+8rxr7CYS/+93v0sc//vG+rhcHxX6CBxxwQF/HR9iM2bynn366dfwb3/jG9Mc//jEddNBB2bN/MTP4vOc9r/V9hMNzzz239Xu8YCZCY7EUZxfj86gn9jVUCBAgQIAAAQIECBAoX0AgLN+8rxr7CYR9XWgCB/31r3/N9iLMt5DILxXPDX71q19NM2bMGHP19qWmMav40Y9+dMwx8QbSCIp5+fnPf96acZxAU51KgAABAgQIECBAgMAAAgLhAGhlnFJ1IHzmmWey4PaVr3yltTl9sd+xHcU3vvGNLPDlL4XpJxB+8pOfTN/5zndal7rpppvSSSedVAapOggQIECAAAECBAgQaBMQCGs6JKoMhLHvYCwHzV/+EnsOxrN/V155Zfra1742RixmCj/zmc9kn8X3seF8XjotGY0A+b3vfa91TGxLEdtTKAQIECBAgAABAgQIlC8gEJZvPm6N8UxdlK1bt6b7778/xV593cooniHctWtXtkz0hz/8YVZt7DcYf89nAdesWZM+8IEPpEcffbTVrPzFMHHcokWLWp93eqlMXC/2McyLzelrNgA1hwABAgQIECBAoFECAmENbncsy4yZsjwMRpMidMWbPscLhKN4y2i8NCY2m89Lp5e+3Hjjjend735365iYNfz0pz+dfvWrX6W3v/3trc8vuuii9IUvfGGM8Mknn5ziucG8xB6HL3nJS2pwFzSBAAECBAgQIECAQPMEBMIK73mEraVLl44JgsXmHH/88dmbQcsssSF9bEyflw0bNqRDDjlkTBN27NiRpk2b1noD6dlnn50tF924cWM69NBDW8fmnxdPnjlzZlq7dm32UWw3EbOLCgECBAgQIECAAAEC1QgIhNW4Z7XmyzC7NSG2ffjZz35WagtXrlyZTj311FadDzzwQHr1q189pg3//e9/0/7775+2bduWfR6zmLENRZQ3v/nN6a677sr+Hs8GxsxnXrZv357taZiXL37xi+nCCy8stX8qI0CAAAECBAgQIEDg/wUEwopGQywTjdnB8cptt92W5s6dW2oL//a3v6XDDz+8VWfMGMby1WKJGb6Y6ctLLCE95ZRTsl+vueaaFHsN5uXxxx9PBx54YPbr7bffPmbPwfvuuy8dccQRpfZPZQQIECBAgAABAgQICISVj4Fes4MRBCMQVlHiTaGxBDTKUUcdlT3z94pXvCL7/d///ndavHhxiqAY5dhjj0233npr2meffbLfYxZw3rx5rVnCmAWM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\",\"fileType\":\"png\",\"fileName\":\"\"}"if (StringUtils.isStrNotBlank(param)) {const h5CallBackBean: H5CallBackBean | null = JSONUtil.jsonToBean<H5CallBackBean>(H5CallBackBean, param)
//保存图片let context = getContext(this);let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);const fileBase64 = h5CallBackBean.dataBase64if (StringUtils.isStrNotBlank(fileBase64)) {const base64: string = fileBase64.split(",")[1]let applicationContext = getContext().getApplicationContext()const numTemp: number = DateUtil.getTodayTime()let filePath = applicationContext.filesDir + '/' + numTemp + "." + h5CallBackBean.fileTypeif (UiUtils.saveBase64File(base64, filePath)) {try {// 获取需要保存到媒体库的位于应用沙箱的图片/视频urilet srcFileUris: Array<string> = [fileUri.getUriFromPath(filePath)];let photoCreationConfigs: Array<photoAccessHelper.PhotoCreationConfig> = [{fileNameExtension: 'jpg',photoType: photoAccessHelper.PhotoType.IMAGE,subtype: photoAccessHelper.PhotoSubtype.DEFAULT, // 可选}];let desFileUris: Array<string> =await phAccessHelper.showAssetsCreationDialog(srcFileUris, photoCreationConfigs);console.info('showAssetsCreationDialog success, data is ' + desFileUris);if (desFileUris.length > 0) {FileUtil.copyFileSync(filePath,new fileUri.FileUri(desFileUris[0]).path)try {console.log(`context.fileDir ===> ${context.filesDir}`)let srcFile: fs.File = fs.openSync(fileUri.getUriFromPath(filePath), fs.OpenMode.READ_ONLY);let targetFile: fs.File = await fs.open(desFileUris[0], fs.OpenMode.READ_WRITE);let bufSize = 14096;let readSize = 0;let buf = new ArrayBuffer(bufSize);let readOptions: ReadOptions = { offset: readSize, length: bufSize };let readLen = fs.readSync(srcFile.fd, buf, readOptions);while (readLen > 0) {readSize += readLen;fs.writeSync(targetFile.fd, buf, { length: readLen });readOptions.offset = readSize;readLen = fs.readSync(srcFile.fd, buf, readOptions);}fs.closeSync(srcFile);fs.closeSync(targetFile);ToastUtil.showToast("保存成功")if (FileUtil.accessSync(filePath)) {FileUtil.unlink(filePath)}} catch (error) {console.error(`createAssetByIo :: error , msg is ${error} `);}} else {ToastUtil.showToast("您拒绝了保存图片")}} catch (err) {console.error('showAssetsCreationDialog failed, errCode is ' + err.code + ', errMsg is ' + err.message);}} else {ToastUtil.showToast("保存失败,请稍后重试")}}}}
其中用到的第三方依赖和上篇文章一致
参考:HarmonyNext保存Base64文件到Download下-CSDN博客
效果如下
【其它问题】
关于授权窗,没显示图片缩略图的问题,官方给的答复是下载最新版本的IDE
相关文章:

【HarmonyOS NEXT】实现保存base64图片到图库
上篇文章介绍了HarmonyOS NEXT如何保存base64文件到download目录下,本次介绍如何保存base64图片到图库,网络图片保存方式大同小异,先下载图片,然后再保存 phAccessHelper.showAssetsCreationDialog参考官方文档’ ohos.file.pho…...

开题答辩最怕被问什么?教你用ChatGPT轻松准备,稳拿高分!
AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 开题答辩是学位论文写作过程中的重要环节,能帮助导师评估你的研究计划是否可行,并对后续写作起到指导作用。很多同学在面对导师提问时会感到紧张,因此提前准备好常见问题的…...
Unity3D功耗和发热分析与优化详解
前言 Unity3D作为广泛使用的游戏开发引擎,在游戏开发过程中,功耗和发热问题一直是开发者需要重点关注的问题。功耗和发热不仅影响用户体验,还可能对设备的硬件寿命造成一定影响。本文将从技术角度详细分析Unity3D游戏在移动设备上的功耗和发…...
深度学习中的掩码介绍
在深度学习中,**掩码(Mask)**通常用于屏蔽掉某些特定部分的数据,以确保模型在训练或推理时不处理无效或无关的输入。掩码的使用场景主要包括处理变长序列、生成模型中的自回归任务、处理填充数据等。掩码可以是二值矩阵(1 表示有效数据,0 表示屏蔽数据),在注意力机制中…...

rust高级进阶总结
文章目录 前言1. Rust生命周期进阶一、不太聪明的生命周期检查(一)例子1(二)例子2 二、无界生命周期三、生命周期约束(HRTB)(一)语法及含义(二)综合例子 四、…...

整理—计算机网络
目录 网络OSI模型和TCP/IP模型 应用层有哪些协议 HTTP报文有哪些部分 HTTP常用的状态码 Http 502和 504 的区别 HTTP层请求的类型有哪些? GET和POST的使用场景,有哪些区别? HTTP的长连接 HTTP默认的端口是什么? HTTP1.1怎…...

分布式数据库环境(HBase分布式数据库)的搭建与配置
分布式数据库环境(HBase分布式数据库)的搭建与配置 1. VMWare安装CentOS7.9.20091.1 下载 CentOS7.9.2009 映像文件1.2启动 VMware WorkstationPro,点击“创建新的虚拟机”1.3在新建虚拟机向导界面选择“典型(推荐)”1…...
100个JavaWeb(JDBC, Servlet, JSP)毕业设计选题
100个JavaWeb(JDBC, Servlet, JSP)毕业设计选题 教育行业 学生信息管理系统在线考试系统课程管理与选课系统教师评价管理系统图书馆管理系统学生成绩查询系统校园论坛作业提交与批改系统学生考勤管理系统教学资源共享平台 企业管理 员工管理系统考勤打卡系统办公用品申请管…...
05 go语言(golang) - 常量和条件语句
常量 在Go语言中,常量是使用 const 关键字定义的,并且一旦被赋值后,它们的值在程序运行期间不能改变。常量可以是字符、字符串、布尔或数值类型。 基本特性 不可修改:一旦一个常量被定义,它的值就不能被更新。编译时…...
【设计模式】深入理解Python中的适配器模式(Adapter Pattern)
深入理解Python中的适配器模式(Adapter Pattern) 在软件开发中,常常会遇到需要让不兼容的类或接口协同工作的问题。适配器模式(Adapter Pattern)是一种结构型设计模式,通过提供一个包装器对象,…...

RuoYi-Vue若依框架-后端设置不登陆访问(白名单)
找到SecurityConfig类 确认自己的需求 /*** anyRequest | 匹配所有请求路径* access | SpringEl表达式结果为true时可以访问* anonymous | 匿名可以访问* denyAll | 用户不能访问* fullyAuthenticated | 用户完全认证可…...
C语言初阶小练习2(三子棋小游戏的实现代码)
这是C语言小游戏三子棋的代码实现 test.c文件是用来测试的部分 game.h文件是用来声明我们说写出的函数 game.c文件是用来编写我们的功能实现函数部分 1.test.c #define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() {printf("***************…...
金融行业合同管理如何利用AI技术进行风险预警?
2024年以来,金融行业的发展主线被锚定,强调了防风险的基调,尤其是系统性风险的防范。金融工作的重点在于实现六个强大:强大的货币、强大的中央银行、强大的金融机构、强大的国际金融中心、强大的金融监管、强大的金融人才队伍。这…...

世界数字农业盛宴与技术探索,25年3月聚焦世界灌溉科技大会
由中国农业节水和农村供水技术协会、中国农垦节水农业产业技术联盟、北京物联网智能技术应用协会、振威国际会展集团主办的“世界灌溉科技大会”、“第11届北京国际数字农业与灌溉技术博览会”,定于2025年3月31日至4月2日在北京国家会议中心举办。 作为世界三大灌溉…...

二百六十九、Kettle——ClickHouse清洗ODS层原始数据增量导入到DWD层表中
一、目的 清洗ClickHouse的ODS层原始数据,增量导入到DWD层表中 二、实施步骤 2.1 newtime select( select create_time from hurys_jw.dwd_statistics order by create_time desc limit 1) as create_time 2.2 替换NULL值 2.3 clickhouse输入 2.4 字段选择 2.5 …...

Maya---骨骼绑定
调节骨骼大小 回车键确认骨骼 FK子集跟父集走 IK子集不跟父集走 前视图中按shift键添加骨骼 清零、删除历史记录,创建新的物体...

携手并进,智驭教育!和鲸科技与智谱 AI 签署“101 数智领航计划”战略合作协议
近日,上海和今信息科技有限公司(以下简称“和鲸科技”)与北京智谱华章科技有限公司(以下简称“智谱 AI”)签署“101 数智领航计划”战略合作协议。双方将携手营造智能化学科教育与科研环境,提供多种大模型工…...
牛客周赛63
https://ac.nowcoder.com/acm/contest/91592 好数 简单的判断两位数,且十位等于个位 #include <bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long using namespace std; using ll long long; using pii …...
git restore恢复删除文件
新版本 在 Git 2.23 版本之后,Git 引入了一个新的命令 git restore,用于简化文件恢复操作。可以用 git restore 来恢复误删除的文件。下面是详细的使用方法: 1. 恢复工作区中删除的文件(未提交) 如果文件已被删除&a…...

MacOS13虚拟机VMware Workstation Pro 16安装
资源 安装unlocker 安装虚拟机 低版本的还没有MacOS13选项,这也是我安装低版本虚拟机踩过的坑 找个教程安装就可以了 省略…自己去找找教程… 过程中我使用桥接是不行的,没有网络,后面重新下一步一步的选择默认的网络重装后就好了&am…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...