Files
drhider/History/ux-frontend/2026-08-20-upload-limits.md
T

2.8 KiB
Raw Blame History

2026-08-20 — Лимиты загрузки + предупреждение в таблице (v0.0.50)

Проблема

Юзер грузил всё подряд (сотни МБ, включая >200МБ) → HTTP 413 / SSE-обрыв. Требование: понятная политика лимитов, но файлы сверх лимита НЕ молча скрывать — показывать в таблице, чтобы юзер не повторял загрузку в недоумении.

Решение (фронт, index.html)

Лимиты:

  • 1 файл > 100 МБ → «не учитывается»
  • сумма учитываемых > 1 ГБ → следующий файл тоже «не учитывается»

Логика:

  • MAX_FILE_BYTES = 100МБ, MAX_SESSION_BYTES = 1ГБ (константы).
  • addFileWithDedup: файл сверх лимита добавляется в sf (виден в таблице), но имя кладётся в overNames (Set). Учитываемость считаем по не-overNames.
  • rr(): строки с overNames получают класс row-over (красный фон/текст), статус «🔥 не учитывается»; счётчик: «N учитываются + M свыше лимита · СУММА».
  • uploadFiles(): строит toSend ТОЛЬКО из учитываемых, sendIdx маппит idx-отправленного → idx в sf (прогресс/таймеры/start/done пишут в верную строку). Если все переборные → «Нет файлов для обфускации (все превышают лимит)».
  • Шапка: добавлена строка «Ограничения: файл не более 100 МБ, суммарно не более 1 ГБ. Файлы сверх лимита помечаются красным и не участвуют в обфускации.»
  • CSS: .row-over td { background: rgba(220,38,38,.10) !important; color:#c0392b; }.
  • rm/resetAll — чистят overNames.

Бэк НЕ менялся (MAX_CONTENT_LENGTH=200МБ, MAX_SESSION_BYTES=500МБ остались как защита на сервере). Внимание: бэк-лимит 200МБ/запрос и 500МБ/сессия всё ещё ниже фронтовых 1ГБ — для файлов 100МБ-200МБ фронт пустит, но одиночный запрос >200МБ упадёт 413. Это можно согласовать позже, если нужно.

Проверка

  • node --check секции <script> index.html — OK.
  • py_compile app.py — OK.
  • Лог-тест лимитов через node: 120МБ→перебор, 13 учитываемых ~995МБ, >1ГБ→перебор — верно.
  • VERSION поднята до 0.0.50.