Pdf скачать с URL, сохранить его в файл, ZIP, а затем скачать ZIP - PullRequest
0 голосов
/ 30 апреля 2018

Использовали 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();

добавление к нему почтового индекса:

    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.generateAsync({type:"blob"})
    .then(function callback(blob) {
      saveAs(blob, "example.zip");
    }

pdf_url_content должен содержать содержимое URL. как читать этот контент? Я пытался использовать jszip-utils. Не в состоянии продолжить. любая помощь будет оценена.

Заранее спасибо.

1 Ответ

0 голосов
/ 30 апреля 2018

Во-первых, было бы бесполезно заархивировать pdf-файл, потому что пользователь будет загружать его разархивированным с помощью xmlhttprequest, а затем заархивировать, поэтому ему придется скачивать файл дважды бесплатно.

Я все равно ответил за вашу информацию

Вы должны установить правильный тип контента на xmlhttprequest, а responseType на blob. Затем вы можете получить доступ к содержимому PDF-файла, используя свойство response внутри onreadstatechange callback

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).

...