Мой блог
Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React
Когда возникает необходимость срочно выгрузить сотни гигабайт данных из облачного хранилища без использования штатных клиентов, стандартные методы часто оказываются неэффективными. Для решения задачи оперативного резервного копирования была создана специализированная утилита, позволяющая массово скачать фотографии и документы с сохранением исходной структуры каталогов.
Проект построен на базе отказоустойчивого стека технологий, включающего бэкенд на Django REST Framework с асинхронными задачами через Celery и Redis, а также реактивный фронтенд на React. Такой подход гарантирует стабильность процесса даже при нестабильном интернет-соединении и защищает от блокировок со стороны облачного сервиса.






Архитектура приложения и распределенные задачи
Для предотвращения зависаний при обработке тысяч файлов архитектура утилиты разделена на клиентскую и серверную части. Запросы проксируются через Nginx, а фоновые операции выполняются в несколько потоков с жестким контролем лимитов API.
Организация бэкенда и контроль лимитов
Использование связки Django, Celery и Redis обеспечивает параллельную обработку данных в восемь потоков. Чтобы избежать ошибок со стороны облачного хранилища, заданы строгие ограничения на количество запросов в секунду (API_QPS равна 4) и степень параллелизма загрузки. При возникновении сетевых ошибок воркеры выполняют повторные попытки с экспоненциальной задержкой.

Для обеспечения целостности данных файлы записываются во временные элементы с расширением .part. В случае принудительной остановки процесса или сбоя сети на накопителе не остаются неполные или поврежденные документы.
Интерфейс на React и управление через дерево каталогов
Интерфейс пользователя реализован на базе React и Vite. Он предоставляет интерактивное дерево папок, в котором можно отметить галочками нужные элементы для экспорта. Передача путей на сервер и отображение статуса выполняются с помощью веб-сокетов.
В реальном времени выводятся показатели прогресс-бара, общая скорость передачи данных, объем оставшихся байтов, а также отчеты об ошибках для каждого конкретного файла.

Инструкция по развертыванию утилиты через Docker
Процесс развертывания проекта автоматизирован с помощью контейнеризации, что позволяет запустить инструмент за несколько минут на любой операционной системе, включая Linux.
Получение токена доступа в Яндекс OAuth
Для работы приложения требуется авторизация по схеме Implicit Flow, при которой Client Secret не используется, а токен обрабатывается локально. Необходимо перейти на страницу создания OAuth-приложений в Яндексе и зарегистрировать новую утилиту.

В настройках прав доступа следует найти блок Яндекс Диск REST API и отметить галочкой разрешение на доступ к файлам в хранилище. После сохранения параметров генерируется и копируется уникальный Client ID.
Далее запускается терминал для клонирования репозитория с исходным кодом проекта и создания файла окружения.
Настройка переменных окружения и запуск
В конфигурационном файле .env прописываются полученный идентификатор клиента, путь для сохранения данных на локальном устройстве, лимит параллельных потоков и ограничения по скорости запросов к API.

Запуск сервисов осуществляется стандартной командой сборки и инициализации контейнеров Docker Compose, после чего веб-интерфейс становится доступен в локальной сети.
Процесс загрузки файлов
После открытия панели управления в браузере запрашивается токен доступа через специальную кнопку авторизации. Предоставление разрешений позволяет связать приложение с облачным хранилищем.

Сгенерированная строка вставляется в форму интерфейса, после чего отображается дерево каталогов. Пользователь отмечает нужные папки, задает локальную директорию и запускает процесс. Фоновые воркеры выполняют скачивание в многопоточном режиме, обеспечивая высокую скорость передачи информации.
