HarmonyNext保存Base64文件到Download下

news2024/12/28 12:26:04

本文介绍如何保存Base64的文件到Download下

参考文档地址:

保存用户文件-Harmony Next

用到的是DOWNLOAD模式保存文件

用户在使用save接口时,可以将pickerMode配置为DOWNLOAD模式,该模式下会拉起授权接口,用户确认后会在公共路径download目录下创建用户当前hap包名的文件夹,并通过save接口返回值回传相应的URI,后续用户可以直接将文件保存在该URI下。

本文里面的Base64Utils和JSONutils都是来自于:

@pura/harmony-utils 1.0.2

参考代码如下

 param =
      "{\"dataBase64\":\"data:audio/midi;base64,TVRoZAAAAAYAAQACAeBNVHJrAAAAIQD/UQMLcbAA/1kCAAAA/1gEBAIYCAD/AQR0dHR0AP8vAE1UcmsAAACrAMAAALB5AACwQAAAsFswALAKQACwB2QAkEdpgXCARwAAkEdVgXCARwAAkEdfgXCARwAAkEdVgXCARwAAkEBfgXCAQAAAkEVVgXCARQAAkD5fgXCAPgAAkENVgXCAQwAAkEdfgXCARwAAkEdVgXCARwAAkEdfgXCARwAAkEdVgXCARwAAkEBfgXCAQAAAkENVgXCAQwAAkEBfgXCQRVUDgEAAgXCARQAA/y8A\",\"fileType\":\"midi\",\"fileName\":\"tttt\"}"
    if (StringUtils.isStrNotBlank(param)) {
      const h5CallBackBean: H5CallBackBean | null = JSONUtil.jsonToBean<H5CallBackBean>(H5CallBackBean, param)
      if (h5CallBackBean) {
        if ('midi' == h5CallBackBean.fileType) {
          const fileBase64 = h5CallBackBean.dataBase64
          if (StringUtils.isStrNotBlank(fileBase64)) {
            const base64: string = fileBase64.split(",")[1]
            const numTemp: number = DateUtil.getTodayTime()
            let uri: string = '';
            // 请确保 getContext(this) 返回结果为 UIAbilityContext
            let context = getContext(this) as common.Context;
            const documentViewPicker = new picker.DocumentViewPicker(context);
            const documentSaveOptions = new picker.DocumentSaveOptions();
            documentSaveOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD;
            // documentSaveOptions.newFileNames = [numTemp + '.midi']
            documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
              uri = documentSaveResult[0];
              console.info('documentViewPicker.save succeed and uri is:' + uri);
              //得到uri后,需要使用FileUri做一层转换,才可以做后续读写的操作
              let path: string = new fileUri.FileUri(uri).path
              //得到path后拼接文件名
              let filePath: string = `${path}/${numTemp}.midi`;
              if (StringUtils.isStrNotBlank(filePath)) {
                if (UiUtils.saveBase64File(base64,filePath)) {
                  ToastUtil.showToast("保存成功")

                }


              }
            }).catch((err: BusinessError) => {
              console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
            })

          }

        }

      }




  /**
   *保存base64文件
   *
   * @param context上下文
   * @param base64base64文件内容
   * @param filePath文件路径
   * @returns是否保存成功
   */
  public static saveBase64File(base64: string, filePath: string): boolean {
    if (!base64 || !filePath) {
      return false;
    }
    const imageBuffer = Base64Util.decodeSync(base64);
    try {
           //这边要多加一个fs.OpenMode.CREATE得到创建文件的权限
                let file  = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
                console.info("file fd: " + file.fd);
                //因为writeSync的入参类型是ArrayBuffer或string,所以这边要使用.buffer转换成ArrayBuffer类型,否则会报错。
     
   fs.writeSync(file.fd, imageBuffer.buffer);
        fs.closeSync(file);
    } catch (err) {
      Logger.error(CommonConstants.TAG, `saveBase64File err: ${err}`);
      return false;
    }
    return true;
  }


需要注意的是:

1.得到uri后,需要使用FileUri做一层转换,才可以做后续读写的操作

2.因为writeSync的入参类型是ArrayBuffer或string,所以这边要使用.buffer转换成ArrayBuffer类型,否则会报错。
     

否则出现Error: Operation not permitted,

防止以后出错,特此记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT丨R语言在生态环境数据统计分析、绘图、模型中的应用

第一单元&#xff1a;生态环境数据统计概述 1.1 生态环境数据特点及统计方法介绍 1&#xff0e;生态环境数据复杂性和多样性 2&#xff0e;生态环境数据类型及分布特点 3&#xff0e;生态环境数据主要统计分析方法及统计检验&#xff08;t-检验、F检验、卡方检验&#xff0…

PostgreSQL Windows系统初始化、登录、创建用户及数据库

文章目录 PostgreSQL初始化PostgreSQL登录 PostgreSQL初始化 initdb 到安装目录下&#xff0c;找到目录E:\postgresql\bin&#xff08;自己的安装目录&#xff09;&#xff0c;在该目录下使用管理员方式打开cmd窗口。 initdb.exe -D "E:\postgresql\bin" E:\postgre…

车载软件架构---软件定义汽车的复杂性

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

闹钟、绘制与TCP

闹钟 pro文件&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimer> #include<QTime> #include<QDebug> #include<QTimerEvent> #include<QDateTime> #include<QTextToSpeech> #i…

sql-labs靶场第十五关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

65.DDR3读写控制器的设计与验证(2)

&#xff08;1&#xff09;写FIFO和读FIFO的配置 &#xff08;2&#xff09;AXI接口写入控制代码&#xff1a; module axi_master_write (//全局变量input wire ACLK , //全局时钟input wire ARESETN , …

AI工具推荐合集

在数字化时代&#xff0c;AI工具的出现极大地改变了我们的工作和生活方式。无论是学术研究、创意设计还是日常写作&#xff0c;这些工具都能提供强大的支持。以下是一些值得推荐的AI工具&#xff0c;帮助您提高效率与创造力。 1. 包阅AI 官网链接: 包阅AI 包阅AI是一款智能A…

哪吒汽车的工资到底发没发?

联网圈第一预言家&#xff0c;也就是美团的王兴&#xff0c;早在新能源热钱最多的那几年就预言&#xff0c;未来中国汽车格局大概率是「3333」。 也就是3家央企、3家地方国企、3家民企和3家新势力…… 此言论一出&#xff0c;当时可以说惹急了很多车企&#xff0c;比如已经退…

Leetcode—1115. 交替打印 FooBar【中等】(多线程)

2024每日刷题&#xff08;180&#xff09; Leetcode—1115. 交替打印 FooBar C实现代码 class FooBar { private:int n;sem_t fooSem;sem_t barSem;public:FooBar(int n) {this->n n;sem_init(&fooSem, 0, 1);sem_init(&barSem, 0, 0);}~FooBar() {sem_destroy(&…

ARINC 429总线协议

一、概述 ARINC 是美国航空无线电公司英文字头的缩写&#xff0c; 该公司1977年7月21日出版了“ARINC 429规范”一书&#xff0c;429规范就是飞机电子系统之间数字式数据传输的标准格式&#xff0c;在飞机上使用429总线的电子设备均应遵守这个规范&#xff0c;这样才能保证电子…

Debug-029-el-table实现自动滚动分批请求数据

前情提要 最近做了一个小优化&#xff0c;还是关于展示大屏方面的。大屏中使用el-table展示列表数据&#xff0c;最初的方案是将数据全部返回&#xff0c;确实随着数据变多有性能问题&#xff0c;有时请求时间比较长。这里做的优化就是实现列表的滚动到距离底部一定高度时再次请…

如何处理多频段时序特征?这个Transformer变体显著提升预测效果

Transformer 模型已在时间序列预测中展现了卓越的性能。然而&#xff0c;在一些复杂场景中&#xff0c;它倾向于学习数据中的低频特征&#xff0c;而忽略了高频特征&#xff0c;表现出一种频率偏差。这种偏差阻碍了模型准确捕捉重要的高频数据特征。 本文介绍一篇来自 KDD 202…

菜鸟笔记006 截图识别文字插件 textOCR

随手可得的截图识别文字插件 textOCR&#xff0c;识别出来的文字可直接输入到illustrator的当前文档中&#xff1a; 执行条件 1、需截图软件支持&#xff0c;推荐笔记截图工具 2、截好图片直接拖入面板即可完成识别 ****后期可完成实现在illustrator选择图片对象完成文字识别。…

Docker-Harbor概述及构建

文章目录 一、Docker Harbor概述1.Harbor的特性2.Harbor的构成 二、搭建本地私有仓库三、部署 Docker-Harbor 服务四、在其他客户端上传镜像五、维护管理Harbor 一、Docker Harbor概述 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅…

方波信号发生器(完整SCL源代码)

正弦和余弦信号发生器请参考下面文章链接: 1、博途PLC平台 PLC信号发生器(博途SCL)_博图软件波形发生器怎么用-CSDN博客文章浏览阅读1.1k次。本文介绍了如何使用博途SCL编程实现不同周期和幅值的信号发生器,包括余弦和正弦信号。通过信号发生器,可以用于验证PLC的滤波器效…

cesium模型加载

注意cesium版本&#xff1a; "three": "^0.168.0", 代码&#xff1a; <template><Layout :bg-color"black"><template #content><div id"cesiumContainers"><div id"cesiumContainer" class&q…

【C++】——二叉搜索树

目录 一、前言 二、二叉搜索树 2.1概念 2.2二叉搜索树操作 2.2.1 二叉树的查找 2.2.2 二叉搜索树的插入 2.2.3 二叉搜索树的删除 ​编辑 2.3二叉搜索树的实现 2.3.1查找 2.3.2 插入 2.3.3 删除 2.3.4 打印 2.3.5 拷贝构造和赋值重载 2.3.6 析构函数 2.4 二叉搜索…

智能去毛刺:2D视觉引导机器人如何重塑制造业未来

机器人技术已经深入到各个工业领域中&#xff0c;为制造业带来了前所未有的变革。其中&#xff0c;2D视觉引导机器人技术以其精准、高效的特点&#xff0c;在去毛刺工艺中发挥着越来越重要的作用。本文将为您介绍2D视觉引导机器人技术的基本原理及其在去毛刺工艺中的应用&#…

c++初阶数据结构速成

温馨提示&#xff1a;本篇文章只给大家介绍初阶数据结构的一些常用接口 stl的简单介绍 什么是stl? STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的 组件库&#xff0c;而且是一个包罗数据结构与算法的软件框…