Как сохранить несколько загруженных файлов Excel в ZIP-файл с помощью Angular2

Я скачал файлы и затем сохранил все в zip с сервера:

const zipFile: JSZip = new JSZip();
for (let i = 0; i < sessionIds.length; i++) {
  this.getReport(id).toPromise()
    .then(
      (res) => {
        zipFile.file(res, 'test.xls', { type: 'application/vnd.ms-excel' });
      });
}
zipFile.generateAsync({ type: 'Blob' })
  .then((content) => {
    saveAs(content, 'content.zip');
  });

Но сгенерированный файл content.zip пуст, он не сохраняет в нем никаких файлов xls. Если я получаю файлы xls один за другим, это работает. Пожалуйста, помогите мне сохранить все файлы в.zip.

1 ответ

Вы пытаетесь сгенерировать zip перед добавлением любого отчета в jsZip.

вам нужно дождаться загрузки всех отчетов, прежде чем вызывать zipFile.generateAsync

doc: forkjoin

так что попробуйте это:

import "rxjs/add/observable/forkJoin";
...

const zipFile: JSZip = new JSZip();

const reportObs: Observable<any>[] = sessionIds.map(id => {
    return this.getReport(id).map(res => {
        zipFile.file(res, 'test.xls', { type: 'application/vnd.ms-excel' });
    });
});

Observable.forkJoin(reportObs).subscribe(() => {
    zipFile.generateAsync({ type: 'Blob' })
      .then((content) => {
        saveAs(content, 'content.zip');
      });
});
Другие вопросы по тегам