82d9ca913699fd5b7e7c32265757b82ef7f41685
Upload Platform
Переиспользуемый сервис загрузки файлов через ВМ-буфер. Выносит два слоя — выбор файлов (фронт) и закачку через ВМ (фронт + бэк) — в отдельный проект, который копируется в любой другой проект.
Паттерн: браузер → PUT на ВМ-буфер → Flask POST /api/upload_refs (egress pull) → сессия.
Слои
| Слой | Ответственность |
|---|---|
| 0. Конфиг | vmUploadUrl, allowedExt, лимиты, ретраи |
| 1. Выбор файлов | таблица, дедуп, раскрытие ZIP, рекурсивный обход папки |
| 2. Закачка через ВМ | PUT на ВМ → pull в сессию |
| 3. Логика приложения | здесь — стаб-заглушка (в каждом проекте своя) |
Структура
upload-platform/
├── requirements.txt
├── config.json # слой 0 (рабочий конфиг этого демо)
├── upload/ # ← переиспользуемый модуль (копируется в любой проект)
│ ├── README.md # инструкция интеграции
│ ├── config.example.json
│ ├── frontend/ # слои 1+2 (vanilla JS, ES-модули)
│ │ ├── zip/
│ │ ├── table/
│ │ └── upload/
│ └── backend/ # слой 2 (Python)
│ ├── upload_refs/
│ └── session/
└── site/ # демо-обёртка (не переиспользуется)
├── app.py
├── routes/
├── templates/
└── static/
Локальный запуск
pip install -r requirements.txt
python site/app.py
# → http://127.0.0.1:5000/
Деплой на Nubes
- Точка входа:
site/app.py(платформа запускаетpython site/app.py). app.run(host="0.0.0.0", port=5000, debug=False).- Маршрут
/health→200(иначе liveness-проба платформы убивает под). - Без
site/__init__.pyи factory pattern.
Как интегрировать слои в другой проект
- Скопировать папку
upload/в свой проект. - Задать свой конфиг (по образцу
upload/config.example.json). - Фронт: подключить ES-модули из
upload/frontend/через<script type="module">, вызватьinitUploadTable(cfg)иuploadViaVM(...). - Бэк: зарегистрировать
create_upload_refs_blueprint(cfg), импортироватьupload.backend.session. - Слой 3 (обработка файлов) — свой; сюда приходит список файлов сессии после закачки.
Подробнее — PLAN.md.
Languages
JavaScript
50.1%
Python
36.7%
HTML
9.4%
CSS
3.8%