vue 预览zip

        ZIP的数据从接口传递数据流过来。解析数据流,并将zip的目录绑定到tree中。

1.引入插件jszip:

        yarn add jszip

2.在需要引用的页面引用:

        import JSZip from 'jszip'

3. 实现代码

        

   api(option).then((res)=>{   // 接口获取zip的数据流     

             let jszip = new JSZip()
             jszip.loadAsync(res.data).then(zip=>{
              let myData=[]
              that.transformData(zip, myData,0,)
              that.treeData=myData // 将数据绑定到tree
              that.$nextTick(()=>{
                            that.expandedKeys=['0']
                     })
               })
     });

 transformData(obj, myData, level = 0,) {
      let id=0
      if(Object.keys(obj.files).length==0){
        let fname=this.fileName.substring(0, this.fileName.lastIndexOf("."))
        let rootData={id:'0',parentId:'', key:'0',title:fname, children:[]}
        myData.push(rootData)
      }else{
      for (let key in obj.files) {
        let array=key.split('/').filter(item => item != '')
        if(array.length == level+1){
          if (obj.files[key].dir) {
            if(level==0){ 
              let rootData={parentId:'', key:'0',title:array[level], children:[]}
              myData.push(rootData)
              this.transformData(obj, rootData,level+1)
            }else{
              if(key.indexOf(myData.fullName)===0 && key!= myData.fullName){
              let newData={ key:myData.id+'-'+id,parentId:myData.id, title:array[level],children:[],fullName:key}
              myData.children.push(newData)
              id++
              this.transformData(obj, newData,level+1)
              }
            }
          }else{ // 文件
           if(key.indexOf(myData.fullName)==0 && key!=myData.fullName){
            let data= {parentId:myData.id, key:myData.id+'-'+id,title:array[level],}
             myData.children.push(data)
             id++
           }
          }
        }
      }
      }
      
      return myData;
    },

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值