2026-09-05 09:29:03 +03:00
2026-09-05 09:29:03 +03:00
2026-09-05 08:51:32 +03:00
2026-09-05 09:29:03 +03:00
2026-09-05 08:09:05 +03:00
2026-09-05 08:51:32 +03:00

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).
  • Маршрут /health200 (иначе liveness-проба платформы убивает под).
  • Без site/__init__.py и factory pattern.

Как интегрировать слои в другой проект

  1. Скопировать папку upload/ в свой проект.
  2. Задать свой конфиг (по образцу upload/config.example.json).
  3. Фронт: подключить ES-модули из upload/frontend/ через <script type="module">, вызвать initUploadTable(cfg) и uploadViaVM(...).
  4. Бэк: зарегистрировать create_upload_refs_blueprint(cfg), импортировать upload.backend.session.
  5. Слой 3 (обработка файлов) — свой; сюда приходит список файлов сессии после закачки.

Подробнее — PLAN.md.

Переиспользуемая инструкция находится в upload/README.md.

S
Description
No description provided
Readme
511 KiB
Languages
JavaScript 50.1%
Python 36.7%
HTML 9.4%
CSS 3.8%