jszip 网络请求数据并将多文件下载zip

1,805 阅读1分钟
设置url数组
const URLS = [{
      name: 'cabinet',
      url: ''
    },
    {
      name: 'system',
      url: ''
    },
...
  ] 
  
循环获取数据,下载文件
     for (let i = 0; i < URLS.length; i++) {
        let url = URLS[i].url;
        let name = URLS[i].name;
        fetch(url) // 1) fetch the url
          .then(function (response) { // 2) filter on 200 OK
            if (response.status === 200 || response.status === 0) {
              return Promise.resolve(response.blob());
            } else {
              return Promise.reject(new Error(response.statusText));
            }
          })
          .then(JSZip.loadAsync) // 3) chain with the zip promise
          .then(function (con) {
            let files = Object.values(con.files);
            for (let j = 0; j < files.length; j++) {
              let data = files[j]._data;
              zip.file(`${name}/${files[j].name}`, data, {
                base64: true,
                binary: true,
              })
            }
            //下载文件
            zip.generateAsync({
               type: "blob"
             })
            .then(blob => saveAs(blob, 'project'))
            .catch(e => console.log(e));
          }).catch(()=>{})
      }