Как сохранить несколько загруженных файлов 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');
});
});