下载javascript之前,多个下载链接指向一个zip文件

Dud*_*310 4 javascript url download jszip

在javascript中,是否可以将多个下载网址发送到一个zip文件中,并且可以下载该zip文件。差不多,在我的网页上,只有一个按钮,当单击该按钮时,会从压缩为zip的下载URL中下载所有文件的zip文件?

我相信我需要使用jszip或类似的工具。这完全有可能吗?关于从哪里开始有什么建议吗?

gue*_*314 6

您可以使用JSZip.jsXMLHttpRequest()Array.prototype.map()Promise.all()创建.zip时文件的所有请求都完成的文件; 使用<a>带有元素download属性设置为objectURL.zip在文件JSZip .generateAsync()功能,点击a元素应该显示Save File对话框,创建.zip可下载的文件。

<head>
  <script src="jszip.js"></script>
  <script>
    window.onload = function() {
      var zip = new JSZip();
      var a = document.querySelector("a");
      var urls = ["a.html", "b.html"];

      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()
        })
      }

      Promise.all(urls.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;
          });
        })
    }
  </script>
</head>

<body>
  <a href="" download>download</a>
</body>
Run Code Online (Sandbox Code Playgroud)

plnkr http://plnkr.co/edit/baPtkILg927DtJfh4b5Y?p=preview