从URL下载PDF文件,保存到文件中,压缩文件并下载压缩包。

3

我一直在使用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应该拥有url的内容。如何读取这个内容?我尝试使用jszip-utils,但无法继续。任何帮助将不胜感激。

提前致谢。

1个回答

2
首先,将pdf文件压缩是无用的,因为用户将通过xmlhttprequest下载未压缩的文件,然后再进行压缩,这样他将不得不白白下载两次文件。
我还是回答了您的问题,以供参考。
您应该将适当的内容类型设置为您的xmlhttprequest,并将responseType设置为blob。然后,您可以在onreadstatechange回调内部使用response属性访问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();

请注意,在下载部分(saveAs函数)需要使用FileSaver.js

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接