Add upload cleanup functionality and improve error handling for media uploads
Implemented a new background service, UploadsCleanupBackgroundService, to manage stale uploads in the uploads directory. Enhanced error handling in the media upload process to ensure incomplete uploads are deleted immediately upon failure, preventing unnecessary storage usage. Updated the .env.example and StorageOptions to include configuration for stale upload retention time. Improved documentation to reflect these changes and clarify the upload process.
This commit is contained in:
@@ -162,7 +162,7 @@ UTC; локальный пояс показывает фронтенд. Разд
|
||||
```
|
||||
/media
|
||||
├── inbox/ # ручная укладка файлов (SFTP/rsync), подбирается сканером
|
||||
├── uploads/ # незавершённые chunked-загрузки из админки
|
||||
├── uploads/ # незавершённые загрузки из админки; регистрация уносит файл в originals/
|
||||
├── originals/{assetId}/ # исходник; удаляется после успешной нарезки
|
||||
└── assets/{assetId}/
|
||||
├── seg00000.ts … # сегменты строго по 2с
|
||||
@@ -227,6 +227,7 @@ Storage__SegmentSeconds=2
|
||||
Storage__LiveWindowSegments=10
|
||||
Storage__KeepOriginals=false
|
||||
Storage__MinFreeSpaceBytes=10737418240
|
||||
Storage__StaleUploadHours=24
|
||||
Media__FfmpegPath=/usr/bin/ffmpeg
|
||||
Media__FfprobePath=/usr/bin/ffprobe
|
||||
Media__MaxUploadBytes=21474836480
|
||||
@@ -264,6 +265,13 @@ Scheduler__TickMinutes=30
|
||||
буферизации тела в память: chunked-куски пишутся в `uploads/`, `complete` делает атомарный `move`
|
||||
внутри той же ФС.
|
||||
|
||||
`uploads/` — перевалочный каталог: токен загрузки нигде не хранится, поэтому всё, что там осталось
|
||||
после запроса, — мусор, на который никто не сослался. Убирается в два эшелона: недописанный файл
|
||||
сносится на месте (обрыв заливки, отказ регистрации, сбой БД), а `UploadsCleanupBackgroundService`
|
||||
раз в час подметает залежавшееся дольше `Storage__StaleUploadHours` (0 — уборку не делать) — это
|
||||
страховка от аварийного рестарта посреди заливки. Порог считается от времени последней записи,
|
||||
поэтому идущая многочасовая загрузка под него не попадает.
|
||||
|
||||
## Открытые эксплуатационные вопросы
|
||||
|
||||
- Удаление ассета/шоу запрещать, пока на них ссылается будущее расписание или пул канала.
|
||||
|
||||
Reference in New Issue
Block a user