# upload — переиспользуемые слои загрузки через ВМ Два самодостаточных слоя для выноса в любой другой проект БЕЗ изменения кода (меняется только конфиг). Поведение 1:1 с drhider v0.0.75. ``` upload/ frontend/ zip/ # распаковка ZIP (чистые функции) table/ # слой 1: выбор файлов/папки/архива, дедуп, статусы, таблица upload/ # слой 2 (фронт): PUT на ВМ + POST /api/upload_refs backend/ upload_refs/ # слой 2 (бэк): Blueprint upload_refs (SSRF, _safe_name, ретраи) session/ # in-memory сессия с TTL и лимитами config.example.json ``` ## Что это | Слой | Где | Ответственность | |---|---|---| | **1. Выбор файлов** | фронт | таблица, дедуп, раскрытие ZIP, путь, статусы, кнопки | | **2. Закачка через ВМ** | фронт + бэк | PUT на ВМ-буфер (фронт) → `upload_refs` pull (бэк) → сессия | | **3. Логика приложения** | — | у каждого приложения своя (обфускация, SSE и т.п.). В модуле её НЕТ | Паттерн (зачем ВМ): шлюз managed-кластера рвёт тела >64КБ, egress не ограничен. Поэтому: браузер → `PUT` на ВМ-буфер → Flask `POST /api/upload_refs` → egress `GET` → сессия. --- ## Подключение фронта Подключить ES-модули (`