Upload Platform

Переиспользуемый browser-only file-picker. Модуль выбирает отдельные файлы, папки и ZIP, строит сворачиваемое дерево и возвращает исходные browser File objects с полными путями. Файлы не отправляются на VM и не загружаются через backend.

Слои

Слой Ответственность
Конфиг allowedExt, labels, layout, limits
Picker таблица, дедупликация, ZIP, рекурсивный обход папки
Интегрирующее приложение получает leaf-файлы через getFiles()

Структура

upload-platform/
├── requirements.txt
├── config.json               # слой 0 (рабочий конфиг этого демо)
├── upload/                   # ← переиспользуемый модуль (копируется в любой проект)
│   ├── README.md             # инструкция интеграции
│   ├── config.example.json
│   ├── frontend/             # picker (vanilla JS, ES-модули)
│   │   ├── zip/
│   │   ├── table/
│   └── backend/              # LEGACY: VM upload/session remnants
└── 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.

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

  1. Скопировать upload/frontend/ и один из собранных файлов dist/ в свой проект.
  2. Подключить file-picker.iife.js через <script> и вызвать FilePicker.initFilePicker, либо импортировать ESM-бандл.
  3. Передать mount, allowedExt, а при необходимости labels, layout, limits и onChange.
  4. Получить выбранные leaf-файлы через picker.getFiles(); каждый элемент содержит path, name, size и исходный file.
  5. После удаления компонента вызвать picker.destroy().

Разрешённые расширения демо: .pdf, .doc, .docx, .txt, .md. ZIP-файлы используются как контейнеры и раскрываются в браузере; сам ZIP не возвращается как leaf-файл. По умолчанию действуют ограничения: 1000 entries, 100 MiB суммарно, 50 MiB на entry и глубина 20.

Legacy

upload/backend/ и старые VM-upload упоминания сохранены только для истории и совместимости с предыдущими этапами проекта. Текущая picker-only интеграция их не импортирует и не требует Flask API для обработки файлов. Переиспользуемая инструкция находится в upload/README.md.

Полный справочник функций, состояния, DOM-контрактов и ограничений находится в docs/CODE-REFERENCE.md.

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