2016-01-10 6 views
0

Я пытаюсь использовать jszip.js для объединения нескольких файлов excel с сервера, которые должны быть загружены вместе в виде zip-файла при щелчке.zip excel файлы с сервера для загрузки

Когда я просто пытаюсь заменить демо-скрипт, я могу создать zip-файл, но он пуст.

Когда я поместил два файла в zip.file, чем первый появится в zip, но он поврежден. как:

var zip = new JSZip(); 
zip.file('http://website/file1.xlsx', 'http://website/file2.xlsx'); 
var content = zip.generate({type:"blob"}); 
saveAs(content, "example.zip"); 

Так что я должен поставить имя файла на первой позиции и чем местоположение файла, но чем я должен получить доступ к нему по-другому ...

I думаю, я просто не проверяю, как работает API.

Было бы здорово, чтобы получить пример, по меньшей мере, двух файлов, размещенных на сервере ...

+0

вы не можете передать ему URL-адреса, вам нужно передать фактические данные в последний раз, когда я их использовал. этим URL-адресам придется загружать синхронизацию, чтобы построить zip, как это, и я не думаю, что узел делает это легко ... – dandavis

+0

спасибо за быстрый комментарий! Вы знаете, может быть, еще один способ заставить его работать? – KriKox

+0

Также имейте в виду, что файлы .xlsx уже являются zip-файлами (просто добавьте .zip в имя, чтобы проверить его). Поэтому при добавлении файла вы можете сказать, что библиотека не будет сжиматься снова, а в 'STORE' файл (если библиотека поддерживает это). Это может сэкономить некоторое время при создании zip-файла (если только библиотека не достаточно умна, чтобы сначала проверить заголовок файла и понимает, что она уже сжата). –

ответ

1

JSZip не может загрузить содержимое, но вы можете использовать XHR (с xhr.responseType = "arraybuffer") или JSZipUtils если вы необходимо поддерживать IE < = 9. Более подробную информацию вы можете найти на документации this page.

Что вы пытаетесь сделать, выглядит как this example: загрузите несколько файлов и запишите их.

Без копировать/вставить весь код, пример:

  • запускает AJAX звонков (с JSZipUtils, но вы можете легко использовать только responseType = "arraybuffer" если вы только поддерживаете последние браузеры)
  • завернуть их в обещания (JQuery обещает здесь, но вы можете использовать свой собственный)
  • добавить результат в объект почтового
  • подождать, пока все обещания завершить до запуска загрузки
+0

Спасибо большое! Я понял ... – KriKox