Я ищу, используя JSZip
, создаю zip-файл в файле из разных файлов вниз. Вот псевдо-код для того, что я пытаюсь сделать:JSZip в koa.js с потоковым вводом/выводом
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]);
Но главным образом я надеюсь, что способ только держать один файл в памяти в то время, и поток результат через почтовый индекс обратно клиент. Возможно ли это с JSZip
?
Вы пытаетесь передать файлы в файл .zip, загруженный с клиентской стороны? – guest271314
его немного сложнее, чем то, что я здесь представлял, но в основном на стороне сервера могут быть N файлов за определенным идентификатором, и клиент должен получить один ZIP-файл, содержащий все файлы. В хранилище данных на бэкэнд они не предварительно застегнуты, поэтому я буду делать это на лету. – Kevin
, чтобы ответить на ваш вопрос; да, клиент дает идентификатор и ожидает, что ZIP-файл будет возвращен. – Kevin