@sazhyk

Как архивировать загружаемые в Django файлы на лету?

Подскажите как реализовать архивацию загружаемых пользователем файлов?
Если на пальцах, то задача такая:
1. Есть форма с
<input type="file" multiupload>
2. Файлы пользователя после загрузки должны быть доступны для скачивания по ссылке в виде одного архива.

Может есть готовые решения? Может кто-то реализовывал подобное - поделитесь опытом.
PS. я понимаю, что это неслабая нагрузка на сервер, но другого решения я не вижу.
  • Вопрос задан
  • 282 просмотра
Пригласить эксперта
Ответы на вопрос 1
@deliro
Для того, чтобы один юзер не положил работу всего сервера, схема должна выглядеть примерно так:
1) Юзер передаёт файлы в форме
2) Джанга сохраняет файлы в файловой системе и создаёт задачу для Celery
3) Джанга отдаёт юзеру редирект на УРЛ. Например, такой: /tasks/17d9565387b046c1ba84bdbe55e0b0c8/, на которой стоит скрипт, который раз в секунду/2/10 кидает AJAX запросы на УРЛ статуса задачи: /tasks/17d9565387b046c1ba84bdbe55e0b0c8/status/ и либо заставляет юзера ждать дальше, либо показывает результат
-- Тем временем (параллельно) Celery добирается до той самой задачи и создаёт архив.
4) Юзеру показывается ссылка для скачивания архива.

По желанию можно не редиректить юзера/навесить права на просмотр задач только юзерам, их создавшим и так далее. Можно даже не использовать Celery, а обойтись одним subprocess и пайпами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы