HarmonyOS/OpenHarmony 如何将rawfile中文件复制到沙箱中

关键词:h5离线加载、HarmonyOS、OpenHarmony、文件操作、复制、解压

当下有一个场景,需要离线加载 h5离线资源zip包,并实现资源包的动态更新,那么仅靠 $rawfile并不能实现该功能,那么我们该如何实现?

我们可以充分利用文件管理实现该功能,将 rawfile 中默认离线 h5 资源 zip 压缩包复制到指定的沙箱路径中,随后解压,供webview直接加载沙箱中的h5资源,后续可提供在线下载的形式直接更新沙箱中文件内容达到页面更新的效果,那么开始。

rwafile文件拷贝完成后,若为h5离线资源包,该如何使用webview加载,并实现在线更新资源包?HarmonyOS/OpenHarmony 离线加载web资源,并实现web资源更新

1. 使用上下文的 resourceManager 获取文件 Uint8Array 数据

此处的 zip/ohosInteractive.zip 对于的为 rawfile 目录下的 zip目录中 ohosInteractive.zip 文件,根据自己的业务需求自行调整即可。

let uint8Array: Uint8Array = this.context.resourceManager.getRawFileContentSync("zip/ohosInteractive.zip");

2. 将获取的 unit8Array 数据 转换为 ArrayBuffer

// 此处需要导入arkts kit库
import { buffer } from '@kit.ArkTS';let bf = buffer.from(uint8Array).buffer;

3. 创建沙箱路径

创建沙箱路径时可使用应用上下文获取到filesDir,随后在该目录下创建自己的目录,方便统一管理

// 导入文件模块
import { fileIo as fs } from '@kit.CoreFileKit';// 创建沙箱目录
let boxPath = this.context.getApplicationContext().filesDir
let unzipPath = boxPath + "/webSources"
try {fs.mkdirSync(unzipPath)
} catch (e) {
}

4. 在创建的沙箱路径下创建待拷贝数据的空文件

需要注意的是,沙箱路径下本身没有 ohosInteractive.zip 文件,但是我们使用 open() 方法时设置 fs.OpenMode.CREATE 权限,即可自动创建出该文件,并配置读写权限。

let boxPath = this.context.getApplicationContext().filesDir
let zipPath = boxPath + "/webSources/ohosInteractive.zip"const fsOpen = fs.openSync(zipPath, fs.OpenMode.READ_WRITE | fs.OpenMode.READ_ONLY | fs.OpenMode.CREATE | fs.OpenMode.TRUNC)

5. 写入数据

在第 2 步中,已经获取到了 rawfie 下资源文件的 ArrayBuffer 数据了,接下来我们可以直接使用 已经创建并待写入数据的 fsOpen 利用 fs.write() 方法写入数据

let destFile = fs.writeSync(fsOpen.fd, bf);
// 写入完毕后关闭文件,因为在上一步文件在开启中
fs.close(destFile)

此时,文件已经成功写入到了指定的沙箱路径下了哦~

完整代码

let boxPath = this.context.getApplicationContext().filesDir
let unzipPath = boxPath + "/webSources"
let zipPath = boxPath + "/webSources/ohosInteractive.zip"// 获取rawfile资源文件,转换数据
let uint8Array: Uint8Array = this.context.resourceManager.getRawFileContentSync("zip/ohosInteractive.zip");
let bf = buffer.from(uint8Array).buffer;// 创建沙箱目录
try {fs.mkdirSync(unzipPath)
} catch (e) {
}// 打开文件
const fsOpen = fs.openSync(zipPath, fs.OpenMode.READ_WRITE | fs.OpenMode.READ_ONLY | fs.OpenMode.CREATE | fs.OpenMode.TRUNC)// 写入文件
let destFile = fs.writeSync(fsOpen.fd, bf);
// 关闭文件
fs.close(destFile)

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

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

相关文章

在线代码编辑器

在线代码编辑器 文章说明前台核心代码后台核心代码效果展示源码下载 文章说明 采用Java结合vue3设计实现的在线代码编辑功能,支持在线编辑代码、运行代码,同时支持导入文件,支持图片识别,支持复制代码,可将代码导出为图…

【mod分享】侠盗猎魔2冬日mod,贴图高清化,增加下雪场景,支持光追,并且增加红色霓虹灯

今天小编为大家带来一个新的游戏mod,这次mod主要是修改了游戏《侠盗猎魔2》,我给游戏增加了下雪的场景,并且增加了红色的霓虹灯,整体让游戏沉浸在一种诡异的圣诞气氛中。并且我还提高了游戏材质的分辨率。更多细节需要玩家自己探索…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】 一、上篇回顾二、项目准备2.1 准备模板项目2.2 支持计时功能2.3 配置UART4引脚2.4 支持printf重定向到UART42.5 支持printf输出浮点数2.6 支持printf不带\r的换行2.7 支持ccache编译缓存 三、TFLM集成3.1 添加tfli…

设计模式-策略模式-200

优点:用来消除 if-else、switch 等多重判断的代码,消除 if-else、switch 多重判断 可以有效应对代码的复杂性。 缺点:会增加类的数量,有的时候没必要为了消除几个if-else而增加很多类,尤其是那些类型又长又臭的 原始代…

小鱼ROS2 g++编译报错

把humble换成jazzy ,起初报错 /opt/ros/jazzy/include/rcl_interfaces/rcl_interfaces/srv/detail/list_parameters__struct.hpp:267:10: fatal error: service_msgs/msg/detail/service_event_info__struct.hpp: 没有那个文件或目录 267 | #include "servi…

基于单片机远程家电控制系统设计

本设计基于单片机的远程家电控制系统,以STC89C52单片机为核心,通过液晶LCD1602实时显示并控制,利用ESP8266WiFi模块实现本地与云平台的连接,最终实现远程对于灯光,热水器等家电的开关控制。同时,系统设有防…

HTB:Oopsie[WriteUP]

目录 连接至HTB服务器并开启靶机 1.With what kind of tool can intercept web traffic? 2.What is the path to the directory on the webserver that returns a login page? 3.What can be modified in Firefox to get access to the upload page? 4.What is the acc…

html+css+js实现step进度条效果

实现效果 代码实现 HTML部分 <div class"box"><ul class"step"><li class"circle actives ">1</li><li class"circle">2</li><li class"circle">3</li><li class&quo…

【设计模式-模板】

定义 模板方法模式是一种行为设计模式&#xff0c;它在一个方法中定义了一个算法的骨架&#xff0c;并将一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法允许子类在不改变算法结构的情况下重新定义算法中的某些特定步骤。 UML图 组成角色 AbstractClass&#x…

python编程开发“人机猜拳”游戏

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于SABO-SVR减法平均算法优化…

如何创建一个docker,给它命名,且下次重新打开它

1.创建一个新的docker并同时命名 docker run -it --name one ubuntu:18.04 /bin/bash 这时候我们已经创建了一个docker,并且命名为"one" 2.关闭当前docker exit 3.这时docker已经终止了&#xff0c;我们需要使用它要重新启动 docker start one 4.现在可以重新打…

哈希表(HashMap、HashSet)

文章目录 一、 什么是哈希表二、 哈希冲突2.1 为什么会出现冲突2.2 如何避免出现冲突2.3 出现冲突如何解决 三、模拟实现哈希桶/开散列&#xff08;整型数据&#xff09;3.1 结构3.2 插入元素3.3 获取元素 四、模拟实现哈希桶/开散列&#xff08;泛型&#xff09;4.1 结构4.2 插…

QSqlDatabase在多线程中的使用

Qt中多线程使用数据库_qt数据库管理类支持多数据库,多线程-CSDN博客 1. 代码&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError>…

Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【JavaSE】抽象类

1. 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 在打印图形例子中, 我们…

婚恋交友小程序的设计思路与用户体验优化

在数字化时代&#xff0c;婚恋小程序作为一种新兴的婚恋交友平台&#xff0c;正逐渐成为单身人士寻找伴侣的重要工具。一个优秀的婚恋小程序不仅要有创新的设计思路&#xff0c;还要注重用户体验的优化。编辑h17711347205以下是婚恋小程序的设计思路与用户体验优化的详细阐述&a…

服务器数据恢复—存储映射到服务器上的卷无法挂载的数据恢复案例

服务器存储数据恢复环境&故障&#xff1a; 一台存储上有一组由16块FC硬盘组建了一组raid。存储前面板上的对应10号和13号硬盘的故障灯亮起&#xff0c;存储映射到redhat linux操作系统服务器上的卷挂载不上&#xff0c;业务中断。 服务器存储数据恢复过程&#xff1a; 1、…

【AIGC】ChatGPT提示词解析:如何打造个人IP、CSDN爆款技术文案与高效教案设计

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;打造个人IP爆款文案提示词使用方法 &#x1f4af;CSDN爆款技术文案提示词使用方法 &#x1f4af;高效教案设计提示词使用方法 &#x1f4af;小结 &#x1f4af;前言 在这…

迎国庆,开源完全免费工作流引擎AntFlow 0.9最强版本发布,支持tidb,提升易用性and more...

AntFlow是一款前端仿钉钉的企业级工作流引擎。后端既可嵌入到现有业务系统&#xff0c;也可以做为独立的流程引擎中台部署&#xff08;SAAS模式&#xff09;。嵌入业务系统模式已经在笔者所在企业使用多年&#xff0c;功能丰富&#xff0c;能适多种国产办公场景&#xff1b;简单…