Files
upload-platform/README.md
T

73 lines
3.6 KiB
Markdown

# Upload Platform
Переиспользуемый browser-only file-picker. Модуль выбирает отдельные файлы,
папки и ZIP, строит сворачиваемое дерево и возвращает исходные browser `File`
objects с полными путями. Файлы не отправляются на VM и не загружаются через
backend.
## Слои
| Слой | Ответственность |
|---|---|
| Конфиг | `allowedExt` |
| 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/
```
## Локальный запуск
```bash
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.
## Как интегрировать picker в другой проект
1. Скопировать папку `upload/` в свой проект.
2. Задать конфиг по образцу `upload/config.example.json`.
3. Подключить локальный `fflate` до picker-модуля.
4. Вызвать `initUploadTable({ ...cfg, fileInputEl, folderInputEl, tableBodyEl, countEl })`.
5. Получить выбранные leaf-файлы через `table.getFiles()`; каждый элемент содержит
`path`, `name`, `size` и исходный `file`.
Разрешённые расширения по умолчанию: `.pdf`, `.doc`, `.docx`, `.txt`, `.md`.
ZIP-файлы используются как контейнеры и раскрываются в браузере; сам ZIP не
возвращается как leaf-файл. Ограничения размера и количества файлов не заданы.
## Legacy
`upload/backend/` и старые VM-upload упоминания сохранены только для истории и
совместимости с предыдущими этапами проекта. Текущая picker-only интеграция их
не импортирует и не требует Flask API для обработки файлов.
Переиспользуемая инструкция находится в `upload/README.md`.
Полный справочник функций, состояния, DOM-контрактов и ограничений находится в
[`docs/CODE-REFERENCE.md`](docs/CODE-REFERENCE.md).