2026-09-05 12:55:42 +03:00
2026-09-05 12:31:17 +03:00
2026-09-05 12:58:47 +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 12:58:47 +03:00

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/

Локальный запуск

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/ в свой проект.
  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.

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