FileSystemManager.readZipEntry(Object object)

基础库 2.17.3 开始支持,低版本需做兼容处理

Promise 风格 调用:不支持

小程序插件:支持,需要小程序基础库版本不低于 2.19.2

读取压缩包内的文件

参数

Object object

属性 类型 默认值 必填 说明
filePath string 要读取的压缩包的路径 (本地路径)
encoding string 统一指定读取文件的字符编码,只在 entries 值为"all"时有效。如果 entries 值为"all"且不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容
entries Array.<Object>/'all' 要读取的压缩包内的文件列表(当传入"all" 时表示读取压缩包内所有文件)
success function 接口调用成功的回调函数
fail function 接口调用失败的回调函数
complete function 接口调用结束的回调函数(调用成功、失败都会执行)

object.encoding 的合法值

说明 最低版本
ascii
base64
binary
hex
ucs2 以小端序读取
ucs-2 以小端序读取
utf16le 以小端序读取
utf-16le 以小端序读取
utf-8
utf8
latin1

object.entries 的结构

属性 类型 默认值 必填 说明
path string 压缩包内文件路径
encoding string 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容
position number 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte
length number 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte

encoding 的合法值

说明 最低版本
ascii
base64
binary
hex
ucs2 以小端序读取
ucs-2 以小端序读取
utf16le 以小端序读取
utf-16le 以小端序读取
utf-8
utf8
latin1

object.success 回调函数

参数
Object res
属性 类型 说明
entries Object 文件读取结果。res.entries 是一个对象,key是文件路径,value是一个对象 FileItem ,表示该文件的读取结果。每个 FileItem 包含 data (文件内容) 和 errMsg (错误信息) 属性。

res.entries 的结构

属性 类型 说明
[path: string] Object 文件路径

res.entries[path] 的结构

属性 类型 说明
data string/ArrayBuffer 文件内容
errMsg string 错误信息

object.fail 回调函数

参数
Object res
属性 类型 说明
errMsg string 错误信息

res.errMsg 的合法值

说明 最低版本
fail no such file or directory, open ${filePath} 指定的 filePath 所在目录不存在
fail permission denied, open ${dirPath} 指定的 filePath 路径没有读权限
fail sdcard not mounted Android sdcard 挂载失败

示例代码

const fs = wx.getFileSystemManager()
// 读取zip内某个或多个文件
fs.readZipEntry({
  filePath: 'wxfile://from/to.zip',
  entries: [{
    path: 'some_folder/my_file.txt', // zip内文件路径
    encoding: 'utf-8', // 指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容
    position: 0, // 从文件指定位置开始读,如果不指定,则从文件头开始读。读取的范围应该是左闭右开区间 [position, position+length)。有效范围:[0, fileLength - 1]。单位:byte
    length: 10000, // 指定文件的长度,如果不指定,则读到文件末尾。有效范围:[1, fileLength]。单位:byte
  }, {
    path: 'other_folder/orther_file.txt', // zip内文件路径
  }],
  success(res) {
    console.log(res.entries)
    // res.entries === {
    //     'some_folder/my_file.txt': {
    //         errMsg: 'readZipEntry:ok',
    //         data: 'xxxxxx'
    //     },
    //     'other_folder/orther_file.txt': {
    //         data: (ArrayBuffer)
    //     }
    // }
  },
  fail(res) {
    console.log(res.errMsg)
  },
})

// 读取zip内所有文件。允许指定统一的encoding。position、length则不再允许指定,分别默认为0和文件长度
fs.readZipEntry({
  filePath: 'wxfile://from/to.zip',
  entries: 'all'
  encoding: 'utf-8', // 统一指定读取文件的字符编码,如果不传 encoding,则以 ArrayBuffer 格式读取文件的二进制内容
  success(res) {
    console.log(res.entries)
    // res.entries === {
    //     'some_folder/my_file.txt': {
    //         errMsg: 'readZipEntry:ok',
    //         data: 'xxxxxx'
    //     },
    //     'other_folder/orther_file.txt': {
    //         errMsg: 'readZipEntry:ok',
    //         data: 'xxxxxx'
    //     }
    //  }
  },
  fail(res) {
    console.log(res.errMsg)
  },
})