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

取zip压缩包内容

  • 使用场景 :

用于批量上传。因为单条上传需要上传字段,文件,因此批量上传需要上传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 => {})
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值