Я пытаюсь использовать JSZip с Nodestream и реагировать на интерфейс. Цель состоит в том, чтобы загрузить все файлы из функции. Возможно ли заархивировать файлы во внешнем интерфейсе, используя nodestream, и сгенерировать nodestream. Если это возможно, как мы можем использовать канал для потоковой передачи данных?
Я смог заархивировать и загрузить файлы, используя async и generateasync. Однако метод async и метод generateAsync хранят полный результат в памяти, но не замораживают браузер.
public downloadAttachmentsAsZip = () => {
var zip = new JSZip();
var count = 0;
var zipFileName = this.state.requestObject.RequestID;
this.state.requestObject.Folder.Files.forEach(f => {
JSZipUtils.getBinaryContent(f.ServerRelativeUrl, (err, data) => {
if (err) {
throw err;
}
zip
.file(f.name, data, { binary: true })
.nodeStream()
.pipe(fs.createWriteStream('/tmp/' + f.name))
.on('finish', () => {
console.log("text file written.");
});
count++;
if (count == this.state.requestObject.Folder.Files.length) {
zip
.generateNodeStream({ streamFiles: true })
.on('end', () => {
console.log("zip stream ended.");
})
.pipe(fs.createWriteStream('out.zip'))
.on('finish', () => {
console.log("out.zip written.");
});
}
});
});
}
Насколько я знаю, файловый поток не поддерживается на внешнем интерфейсе. Есть ли другой способ добиться этой функциональности?