我正在研究使用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]);
但主要是我希望有一种方法可以一次只在内存中保存一个文件,并通过 zip 将结果流式传输回客户端。这可能JSZip
吗?