HarmonyOS 如何解析zip文件

现在我从网络上下载了一个zip文件,我要如何解压这个zip文件并放到沙河目录下

HarmonyOS
22h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

可以通过buffer将rawfile文件内容copy到沙箱路径,再对沙箱路径下的压缩文件进行解压。 以下关键代码供参考:

import fs from '@ohos.file.fs';
import { Context } from '@ohos.abilityAccessCtrl';
import zlib from '@ohos.zlib';
@Entry @Component
struct Index {
  @State context: Context =getContext(this);
  build() {
    Row() {
      Column() {
        Button('复制zip到沙箱,并解压zip', { type: ButtonType.Normal, stateEffect: true })
          .borderRadius(8)
          .backgroundColor(0x317aff)
          .width(90)
          .height(40)
          .onClick(()=>{
            /** * 通过fd来进行拷贝,避免文件过大的内存占用问题
             * * data.fd是hap包的fd,data.offset表示目标文件在hap包中的偏移,data.length表示目标文件的长度 */
            this.context.resourceManager.getRawFd("picture.zip", (err, data) => {
              let sandboxPath = this.context.filesDir
              console.log("沙箱路径:" + sandboxPath)
              fs.mkdtempSync(sandboxPath + "/XXXXXX")
              let filePath = this.context.tempDir + "/bfpicture.zip"
              console.log("压缩文件路径:" + filePath)
              let dest = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
              let bufsize = 4096
              let buf = new ArrayBuffer(bufsize)
              let off = 0, len = 0, readedLen = 0
              /** * 通过buffer将rawfile文件内容copy到沙箱路径 */
              while (len = fs.readSync(data.fd, buf, { offset: data.offset + off, length: bufsize })) {
                readedLen += len
                fs.writeSync(dest.fd, buf, { offset: off, length: len })
                off = off + len
                if ((data.length - readedLen) < bufsize) {
                  bufsize = data.length - readedLen
                }
              }
              fs.close(dest.fd)// 对沙箱路径下的压缩文件进行解压
              zlib.decompressFile(filePath, sandboxPath)
              this.context.resourceManager.closeRawFd("bfpicture.zip")
            })
          })
          .width('100%')
      }
      .height('100%')
    }
  }
}

上述将文件copy到沙箱目录再解压的方法若是不行,请参考如下方法

decompressFile(inFile: string, outFile: string, options: Options, callback: AsyncCallback<void>): void;

解压文件,解压的结果通过callback返回,成功时返回null,失败时返回错误码。

详细可参考HarmonyOS官方文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-zlib-V5#zlibdecompressfile9

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-zlib-V5

分享
微博
QQ
微信
回复
20h前
相关问题
HarmonyOS 代码如何解zip文件
60浏览 • 1回复 待解决
HarmonyOS 如何解析xml文件
76浏览 • 1回复 待解决
HarmonyOS 如何解析证书文件
450浏览 • 1回复 待解决
HarmonyOS如何解压rawfile中的zip文件
405浏览 • 1回复 待解决
HarmonyOS 如何解析HTML文本
606浏览 • 1回复 待解决
HarmonyOS 如何解析json字符串?
609浏览 • 1回复 待解决
HarmonyOS EmitterData在接收端如何解析
422浏览 • 1回复 待解决
如何解析JSON字符串?
1288浏览 • 1回复 待解决
鸿蒙JS开发HTTP请求如何解析
2765浏览 • 0回复 待解决
鸿蒙里如何通过代码解压zip文件
162浏览 • 0回复 待解决