API медиатеки файлов — /api/v1/files

Каталог файлов вынесен из ядра в модуль «Медиатека файлов» версии 1.0.0 (пакет cascad360-module-files). Требуется ядро ≥ 1.0.13. Без установленного модуля Files API недоступен — это нормально для облегчённых инсталляций. Установка модуля — отдельный deb или tar.gz.

Персональные данные. Загруженные файлы могут содержать ПДн. Хранение и доступ регулируются политикой оператора инсталляции. См. политику конфиденциальности.

Контракт модуля: OpenAPI модуля после установки; обзор методов — на этой странице. Ядро: Swagger UI, сводный индекс.

На страницах методов — примеры JSON и curl. См. как читать страницу метода.

Доступность API

ПрофильПоведение
Standard (модуль установлен и включён)/api/v1/files/* и раздача /media/… работают
Minimal (модуль отключён)Маршруты каталога не регистрируются — ответ 404

Требования: ядро ≥ 1.0.13, модуль cascad360-module-files 1.0.0, в конфигурации files.enabled: true.

Конфигурация (config.yml)

Модуль использует секции верхнего уровня modules, files и storage в config.yml (или правки через админку → Модули — у пакета есть config_bindings на files / storage). Общий справочник ядра — config-reference; установка — §2.1.2.

modules:
  installed:
    - cascad360-module-files
files:
  enabled: true
  access_profile: standard
storage:
  type: local
  path: /var/lib/cascad360/files

modules — регистрация модуля

КлючПо умолчаниюОписание
modules.installed[]Список установленных модулей. Для медиатеки добавьте cascad360-module-files после установки deb/tar.gz.
modules.disabledИмена модулей, принудительно не стартующих после перезапуска (отключение через админку).
modules.registry_urlиз app.module_registry_urlURL реестра модулей; для зеркала укажите свой домен.

Настройки медиатеки не задаются в modules.settings.cascad360-module-files — только через секции files и storage ниже.

storage — хранилище файлов

КлючПо умолчаниюОписание
storage.typelocalBackend: local (диск) или s3 (S3-совместимое хранилище).
storage.pathstorageКаталог для local-хранения (относительный от корня приложения или абсолютный путь). Ключ именно path, не local.path.
storage.size_limit10GBКвота дискового/S3-хранилища (строка с суффиксом KB/MB/GB).
storage.organize_by_datetrueКласть файлы в подкаталоги по дате загрузки.
storage.organize_by_typetrueДополнительная группировка по MIME/type.
storage.organize_by_categoryfalseГруппировка по category из метаданных upload.
storage.upload_categoriesСписок допустимых category для UI/API (массив строк).
storage.s3.bucket""Имя bucket при type: s3 (без секретов в git).
storage.s3.prefixfiles/Префикс ключей объектов в bucket.
storage.s3.regionus-east-1Регион S3.
storage.s3.endpoint_url""Кастомный endpoint (MinIO, совместимые API).

S3 credentials задаются только через переменные окружения, не в config.yml: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, опционально AWS_SESSION_TOKEN; альтернативные имена — CASCAD360_S3_ACCESS_KEY, CASCAD360_S3_SECRET_KEY.

files — каталог и API

КлючПо умолчаниюОписание
files.enabledtruetrue — регистрируются маршруты каталога и Files API; false — каталог отключён (заглушки, HTTP 503). Без установленного модуля маршруты не регистрируются (HTTP 404).
files.access_profilestandardПрофиль ACL публичной раздачи: open, standard или strict.
files.signed_url_ttl_seconds3600TTL подписанных ссылок /s/… (секунды).
files.delivery_cache_controlpublic, max-age=3600Заголовок Cache-Control для ответов /media/….
files.delivery_frame_ancestorsWhitelist для заголовка Content-Security-Policy: frame-ancestors при встраивании в iframe (массив origin).
files.cors_originsРазрешённые origin для CORS при внешней загрузке через браузер (массив URL).
files.rate_limit_upload_per_minute60Лимит запросов upload на клиента в минуту.
files.chunked_enabledtrueChunked upload для больших файлов.
files.chunked_threshold_mb10Размер файла (MB), выше которого используется chunked.
files.chunked_part_size_mb5Размер одной part при chunked upload (MB).
files.chunked_session_ttl_minutes60Время жизни сессии chunked upload (минуты).
files.stream_ram_threshold_mb16Порог RAM: ниже — streaming delivery без полной буферизации в память.
files.deduplicationoffПолитика дедупликации по хешу содержимого (off или значения политики из релиза модуля).
files.retention_days0Автоудаление старых файлов (дни); 0 — без автоматической очистки.
files.max_file_size100MBМаксимальный размер одного файла в upload.
files.max_files_per_request10Максимум файлов в одном multipart-запросе upload.
files.allowed_mime_typesWhitelist MIME; пустой массив [] — без ограничения по MIME.
files.allowed_extensionsWhitelist расширений (если задан — только они).
files.forbidden_extensionsBlacklist опасных расширений (например .exe, .sh).
files.scan.enabledfalseАсинхронный hook проверки файлов после upload; встроенный антивирус в поставку не входит.
files.scan.mock_asyncfalseMock-сканер для dev/staging (не для production).
files.scan.mock_delay_seconds0.05Задержка mock-сканера (секунды).

При files.scan.enabled: true и статусе файла pending публичная раздача может вернуть 403 до завершения проверки (см. delivery).

Аутентификация

Base path: /api/v1/files

МетодHeaderPermissions (API Key)
JWTAuthorization: Bearer <access_token>access token (не refresh)
API KeyX-API-Key: <key>files:upload, files:download, files:* или *

Методы API