当前位置: 首页 > 工具软件 > jszip > 使用案例 >

jszip 获取上传的zip包中的指定文件的file

蔚琦
2023-12-01

使用场景 :

用于批量上传。因为单条上传需要上传字段,文件,因此批量上传需要上传excel和zip包。 excel记录多条数据, 数据中的单条包括字段值, 有些字段值是zip包中的对应文件名,根据值来读取对应的file文件,用于单条上传。

安装包

npm i jszip -S

二次封装插件

zipGetFile.js

import JSZip from 'jszip';


const parse_zip =  (file_data, fileName)=> {
  return new Promise((resolve, reject) => {
    JSZip.loadAsync(file_data).then((zip) => {
      zip.files[fileName].async('blob').then((blob) => {
        // this.readTextAs(blob, "UTF-8").then(e => {
        //   resolve(e);
        // }).catch(e => {
        //   reject(e);
        // });
        console.log(blob);
        let files = new window.File(
          [blob],
          fileName,
          { type: blob.type }
        );
        resolve(files);

        console.log(files);
      })
    }).catch(e => {
      reject(e);
    })
  })
}

const parse_data = (file_data, fileName) => {
  return new Promise((resolve, reject) => {
    parse_zip(file_data, fileName).then(e => {
      resolve(e)
      // let data = null;
      // try {
      //   data = JSON.parse(e);
      // }
      // catch (e) {
      //   data = null;
      // }
      // data ? resolve(data) : reject(null);
    }).catch(e => {
      reject(e);
    })
  });
}



const readTextAs = (arrayBuffer, encoding) => {
  return new Promise((resolve, reject) => {
    var reader = new FileReader();
    var blob = new Blob([arrayBuffer]);
    reader.onload = function (evt) {
      resolve(evt.target.result);
    };
    reader.onerror = function (evt) {
      reject(null);
    };
    reader.readAsText(blob, encoding);
  }).catch(e => {
    reject(e);
  })
}


export default parse_data

使用

zipGetFile(zip文件, 文件名).then(res => {})
 类似资料: