Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React

Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React

Когда возникает необходимость срочно выгрузить сотни гигабайт данных из облачного хранилища без использования штатных клиентов, стандартные методы часто оказываются неэффективными. Для решения задачи оперативного резервного копирования была создана специализированная утилита, позволяющая массово скачать фотографии и документы с сохранением исходной структуры каталогов.

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

Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React
Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React — изображение 8
Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React — изображение 9
Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React — изображение 10
Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React — изображение 11
Массовое скачивание файлов с Яндекс Диска с помощью утилиты на Django и React — изображение 12

Архитектура приложения и распределенные задачи

Для предотвращения зависаний при обработке тысяч файлов архитектура утилиты разделена на клиентскую и серверную части. Запросы проксируются через Nginx, а фоновые операции выполняются в несколько потоков с жестким контролем лимитов API.

Реклама

Организация бэкенда и контроль лимитов

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

Выбор прав доступа для Яндекс Диск REST API
Настройка разрешений для доступа к файлам на Яндекс Диске

Для обеспечения целостности данных файлы записываются во временные элементы с расширением .part. В случае принудительной остановки процесса или сбоя сети на накопителе не остаются неполные или поврежденные документы.

Интерфейс на React и управление через дерево каталогов

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

В реальном времени выводятся показатели прогресс-бара, общая скорость передачи данных, объем оставшихся байтов, а также отчеты об ошибках для каждого конкретного файла.

Полученный Client ID приложения
Скопированный идентификатор клиента для настройки переменных окружения

Инструкция по развертыванию утилиты через Docker

Процесс развертывания проекта автоматизирован с помощью контейнеризации, что позволяет запустить инструмент за несколько минут на любой операционной системе, включая Linux.

Реклама

Получение токена доступа в Яндекс OAuth

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

Кнопка получения токена в браузере
Веб-интерфейс утилиты с кнопкой запроса токена доступа

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

Далее запускается терминал для клонирования репозитория с исходным кодом проекта и создания файла окружения.

Настройка переменных окружения и запуск

В конфигурационном файле .env прописываются полученный идентификатор клиента, путь для сохранения данных на локальном устройстве, лимит параллельных потоков и ограничения по скорости запросов к API.

Выбор папок в дереве каталогов Яндекс Диска
Интерактивное дерево папок для выбора файлов

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

Процесс загрузки файлов

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

Многопоточная загрузка файлов в интерфейсе
Интерфейс в процессе пакетного скачивания данных

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

01.