开发前端Vue组件涉及OTA文件上传的时候,想优先通过读取OTA升级包(zip)文件的一个描述文件description.json来获取一些参数的信息,这样子不需要跑到后台去解析zip文件内容了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const jszip = require("jszip");
/**
 * OTA升级文件格式
 *
 * Archive: ota.zip
 * Length Date Time Name
 * --------- ---------- ----- ----
 * 75586 11-14-2018 21:32 firmware.hex
 * 124 11-14-2018 21:29 description.json
 * --------- -------
 * 75710 2 files
 */
/**
 * 解压获得OTA升级包内的描述信息
 * @param {Blob} file Zip文件打开之后的Stream
 * @param {string} desc_name Zip内包含描述信息的文件名
 * @return {Promise<string>}
 */
module.exports = function(file, desc_name) {
  return new Promise((resolve, reject) => {
    jszip
      .loadAsync(file)
      .then(zip => zip.file(desc_name).async("string"))
      .then(buffer => buffer.toString())
      .then(content => {
        console.log(`${desc_name} content is:\n${content}`);
        resolve(content);
      })
      .catch(e => {
        reject(`load zip file error: ${e}`);
      });
  });
};

依赖于jszip,使用yarn安装即可。

参考链接:

  1. Extracting zipped files using JSZIP in javascript
  2. How to read a file