当前位置: 首页> 财经> 访谈 > 重庆易企云网络科技有限公司_如何制造一个网页_腾讯广点通_婚恋网站排名前三

重庆易企云网络科技有限公司_如何制造一个网页_腾讯广点通_婚恋网站排名前三

时间:2025/7/11 17:29:23来源:https://blog.csdn.net/u010949451/article/details/144773632 浏览次数:1次
重庆易企云网络科技有限公司_如何制造一个网页_腾讯广点通_婚恋网站排名前三

【HarmonyOS】鸿蒙应用压缩和解压处理

一、前言

鸿蒙应用中经常会遇到使用压缩包的场景。例如H5的离线包逻辑,需要提前将资源包下载到本地,进行压缩操作获取资源。

二、方案思路

鸿蒙中提供@ohos.zlib (Zip模块)进行压缩和解压的处理。
需要注意的是,操作路径需要在沙箱中,那如果压缩包在项目工程资源文件夹中,需要提前对压缩包文件进行拷贝到沙箱路径的操作。

zlib.compressFile 进行压缩

zlib.decompressFile 进行解压

三、源码示例

在这里插入图片描述

import { zlib, BusinessError } from '@kit.BasicServicesKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { common } from '@kit.AbilityKit';
import { util } from '@kit.ArkTS';
import { buffer } from '@kit.ArkTS';

struct ZipTestPage {private TAG: string = "ZipTestPage"; mZipTestContent: string = "";// 指定的待解压缩文件的文件路径,文件后缀需要以.zip结尾。文件路径必须为沙箱路径,沙箱路径可以通过context获取private inFile = '/xx/xxx.zip';// 指定的解压后的文件夹路径,文件夹目录路径需要在系统中存在,不存在则会解压失败。// 路径必须为沙箱路径,沙箱路径可以通过context获取// 如果待解压的文件或文件夹在解压后的路径下已经存在,则会直接覆盖同名文件或同名文件夹中的同名文件。多个线程同时解压文件时,outFile不能相同。private outFileDir = '/xxx';// 解压的配置参数。private options: zlib.Options = {// 压缩率 默认压缩等级。level: zlib.CompressLevel.COMPRESS_LEVEL_DEFAULT_COMPRESSION};aboutToAppear(): void {// 准备zip到沙箱路径下this.copyRawFileToLocal();// 填充待解压文件路径和解压后的文件路径this.setting();}private setting(){let pathDir: string = getContext().filesDir;console.info(this.TAG, "setting pathDir: " + pathDir);this.inFile = pathDir + '/test.zip';console.info(this.TAG, "setting inFile: " + this.inFile);this.outFileDir =  pathDir;console.info(this.TAG, "setting outFileDir: " + this.outFileDir);}/*** 点击解压*/onUnZip = async ()=>{try {console.info(this.TAG, "onUnZip start");// 解压文件,解压的结果回调zlib.decompressFile(this.inFile, this.outFileDir, this.options, (errData: BusinessError) => {if (errData !== null) {console.error(this.TAG, `errData is errCode:${errData.code}  message:${errData.message}`);}console.info(this.TAG, "onUnZip done");// 解压成功后,则去输出的路径下outFileDir,读取文件let fileTarget = fs.openSync(this.outFileDir + "/test.txt",  fs.OpenMode.READ_ONLY);let size = fs.statSync(fileTarget.fd).size;console.info(this.TAG, "onUnZip size: " + size);let bufferRes = new ArrayBuffer(size);let readLen = fs.readSync(fileTarget.fd, bufferRes);fs.closeSync(fileTarget);console.info(this.TAG, "onUnZip readLen: " + readLen);let decoder = util.TextDecoder.create('utf-8');let temp = new Uint8Array(bufferRes);let result = decoder.decodeToString(temp);console.info(this.TAG, "onUnZip text: " + result);this.mZipTestContent = result;// let pathDir: string = getContext().filesDir;// let filePath = pathDir + "/test.txt";// let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE);// let arrayBuffer = new ArrayBuffer(4096);// fs.read(file.fd, arrayBuffer, (err: BusinessError, readLen: number) => {//   if (err) {//     console.error(this.TAG,"read failed with error message: " + err.message + ", error code: " + err.code);//   } else {//     console.info(this.TAG, "read file data succeed");//     let buf = buffer.from(arrayBuffer, 0, readLen);//     console.info(this.TAG, `The content of file: ${buf.toString()}`);//   }//   fs.closeSync(file);// });})} catch (errData) {let code = (errData as BusinessError).code;let message = (errData as BusinessError).message;console.error(this.TAG, `errData is errCode:${code}  message:${message}`);}}private copyRawFileToLocal() {let context = getContext(this) as common.UIAbilityContext; // 获取设备A的UIAbilityContext信息try {let val: Uint8Array = context.resourceManager.getRawFileContentSync("test.zip");console.info(this.TAG, "getRawFileContentSync done");let pathDir: string = context.filesDir; // /data/storage/el2/base/haps/entry/filesconsole.info(this.TAG, "pathDir: " + pathDir);// 待拷贝文件沙箱路径let filePath: string = pathDir + '/test.zip';console.info(this.TAG, "filePath: " + filePath);// 若文件不存在,则创建文件。let fileTarget = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);console.info(this.TAG, "file done");let writeLen = fs.writeSync(fileTarget.fd, val.buffer as ArrayBuffer);console.info(this.TAG, "write data to file succeed and size is:" + writeLen);fs.closeSync(fileTarget);} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;console.error(this.TAG,`getRawFileContentSync failed, error code: ${code}, message: ${message}.`);}}build() {RelativeContainer() {Text("点击解压,内容: " + this.mZipTestContent).id('ZipTestPageHelloWorld').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(this.onUnZip)}.height('100%').width('100%')}
}
关键字:重庆易企云网络科技有限公司_如何制造一个网页_腾讯广点通_婚恋网站排名前三

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: