如何使用Angular2将多个下载的excel文件保存到.zip文件中

时间:2018-01-26 06:55:57

标签: angular jszip

我已下载文件,然后将所有文件从服务器保存到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 个答案:

答案 0 :(得分:0)

在将任何报告添加到jsZip之前尝试生成zip。

在调用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');
      });
});