从url下载pdf,将其保存在文件中,压缩然后下载zip

时间:2018-04-30 18:54:16

标签: javascript angular blob jszip

一直使用jszip来创建和下载zip文件。我可以单独下载pdf文件。但我想将这些pdf下载到zip文件夹中,然后下载zip文件。

下载pdf的代码段:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
       window.location.href = "pdf_url"
    }
};
xhttp.open("GET", "pdf_url");
xhttp.send();

将zip api添加到其中:

    var zip = new JSZip();
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
           window.location.href = "pdf_url"
           zip.file("file_name", pdf_url_content);
        }
    };
    xhttp.open("GET", "pdf_url");
    xhttp.send();

创建zip:

  zip.generateAsync({type:"blob"})
    .then(function callback(blob) {
      saveAs(blob, "example.zip");
    }

pdf_url_content应该包含网址的内容。如何阅读该内容?我尝试使用jszip-utils。无法继续。任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:2)

首先,压缩pdf是没用的,因为用户将使用xmlhttprequest将其压缩下载,然后压缩,因此他必须两次下载文件。

无论如何我回答了你的信息

您应该为xmlhttprequestresponseTypeblob设置正确的内容类型。然后,您可以使用response回调

中的属性onreadstatechange访问pdf的内容
var zip = new JSZip();
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "pdf_url");
xhttp.responseType = "blob";
xhttp.setRequestHeader("Content-type", "application/pdf");
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
       zip.file("file_name", xhttp.response);
       zip.generateAsync({type:"blob"})
          .then(function(blob) {
               saveAs(blob, "example.zip");
          });
    }
};

xhttp.send();

请注意,下载部分(FileSaver.js功能)需要saveAs