JSZip
さまざまなダウンストリーム ファイルからファイルに zip ファイルを作成する方法を検討しています。これが私がやろうとしていることの擬似コードです:
function* handler () {
const ids = this.request.body.ids;
const zip = new JSZip();
for (let i = 0; i < ids; i++) {
const r = yield request.get('/some/remote/service/' + ids[i]);
zip.file(ids[i], r.body);
}
this.body = zip.nodeStream():
}
ただし、おそらくこれには、すべてのファイルの内容を一度にメモリに入れる必要があり、すべてのファイルがダウンロードされるまでストリーミングを開始しません。
次のようなことを行うことで、ダウンロード時間を最適化できることに気付きました。
const allFiles = yield ids.map((id) => request.get('/some/remote/service/' + id));
for (let i = 0; i < ids.length; i++) zip.file(ids[i], allFiles[i]);
しかし、主に、一度に1つのファイルのみをメモリに保持し、結果をzip経由でクライアントにストリーミングする方法を望んでいます。それは可能JSZip
ですか?