Мне нужно будет выполнить массивную загрузку файлов из моего веб-приложения.
Ожидается, что это будет длительное действие (он будет использоваться один раз в год [-per-customer]), поэтому время не является проблемой (если оно не достигло некоторого таймаута, но я могу справляйтесь с этим, создавая некоторую форму сердечного удара). Я знаю, как создать скрытый iframe и использовать его с помощью content-disposition: attachment
, чтобы попытаться загрузить файл, а не открывать его внутри браузера, и как указать связь клиент-сервер для рисования индикатора выполнения;
Фактический размер загрузки (и количества файлов) неизвестен, но для простоты мы можем фактически рассматривать его как 1 ГБ, состоящий из 100 файлов, каждый 10 МБ.
Поскольку это должна быть операция с одним щелчком мыши, моя первая мысль состояла в том, чтобы сгруппировать все файлы, читая их из базы данных, в динамически созданный ZIP, а затем попросите пользователя сохранить ZIP.
Вопрос: каковы наилучшие методы, а также известные недостатки и ловушки при создании огромного архива из нескольких массивов небольших байтов в WebApp?
Это может быть случайным образом разбито на:
- должен ли каждый байт-массив быть преобразован в физический временный файл или может быть добавлен в ZIP-память?
- Если да, я знаю, что мне придется обрабатывать возможное равенство имен (они могут иметь одно и то же имя в разных записях в базе данных, но не внутри одной и той же файловой системы или ZIP): есть ли другие возможные проблемы (при условии, что файловая система всегда имеет достаточное физическое пространство)?
- так как я не могу полагаться на достаточное количество ОЗУ для выполнения всей операции в памяти, я думаю, что ZIP должен быть создан и передан в файловую систему перед отправкой пользователю; есть ли способ сделать это по-другому (например, с помощью websocket), например, спросить пользователя, где сохранить файл, а затем начать постоянный поток данных с сервера на клиент (как я полагаю, Sci-Fi)?
- будут приветствоваться любые другие связанные с вами известные проблемы или передовые методы, которые пересекают ваш разум.