Хотя вся конфигурация правильная, JS Ошибка выдачи Zip zip.generateAsyn c не является функцией - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь скачать почтовый индекс изображений. Эти изображения приходят по какой-то ссылке. Поэтому, как только пользователь нажимает на ссылки, необходимо загрузить zip. Я использую JS ZIP-библиотеку для этого.

Вот мой код

function downloadImagesZAip(){       
    var imgpath = ['https://i.picsum.photos/id/515/536/354.jpg','https://i.picsum.photos/id/237/536/354.jpg'];
    var zip = new JSZip();
    function request(url) {
  return new Promise(function(resolve, reject) {
    var httpRequest = new XMLHttpRequest();
    httpRequest.open("GET", url);
    httpRequest.responseType = "arraybuffer"; // here, you ask for the binary content
    httpRequest.onload = function() {
      zip.file(url, this.response); // you will get an ArrayBuffer there
      resolve();
    };
    httpRequest.onerror = function() {
      // don't forget to reject the promise when an error occurs,
      // the promise will never finish otherwise
      reject(new Error("can't load " + url));
    };
    httpRequest.send();
  });
}

        Promise.all(imgpath.map(function(url) {
          return request(url)
        }))
        .then(function() {
          console.log(zip);
          zip.generateAsync({
              type: "blob"
          })
          .then(function(content) {
            a.download = "folder" + new Date().getTime();
            a.href = URL.createObjectURL(content);
            a.innerHTML = "download " + a.download;
          });
        })



}

Но как только эта функция вызывается при нажатии, она выдает мне ошибку zip.generateAsync is not a function

Я также попытался заменить указанный выше блок запроса на приведенный ниже блок запроса. Но все та же ошибка

function request(url) {
        return new Promise(function(resolve) {
          var httpRequest = new XMLHttpRequest();
          httpRequest.open("GET", url);
          httpRequest.onload = function() {
            zip.file(url, this.responseText);
            resolve()
          }
          httpRequest.send()
        })
      }

Пожалуйста, дайте мне знать, где я делаю это неправильно

...