fix(worker): ingest增加素材有效性校验,坏文件标记为ERROR #488

Merged
auto-approve-bot merged 1 commits from fix/ingest-validation into develop 2026-07-17 22:20:57 +08:00

1 Commits

Author SHA1 Message Date
CI Bot 355e25b2aa fix(worker): ingest增加素材有效性校验,坏文件标记为ERROR不再以READY入库
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 15s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 28s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 50s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 3m22s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m41s
AI Code Review / AI Code Review (pull_request) Successful in 4m21s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m20s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 5m0s
问题:ingest流程中ffprobe/Pillow失败时仍然创建status=READY的asset,
导致27字节文本文件也能伪装成有效视频进入素材库,
一键生成自动选到坏素材直接渲染失败。

修复:
- extract_media_metadata返回(metadata, success)二元组
- 新增_is_valid_media校验函数:
  * 视频:ffprobe成功 + size>=1KB + duration>0
  * 音频:ffprobe成功 + size>=100B + duration>0
  * 图片:Pillow验证通过 + size>=100B + width>0 + height>0
- 校验失败的asset标记为ERROR状态,ingest job标记为FAILED
- 新增14个单元测试:有效性判断+返回值签名+完整ingest流程
- 补充音频元数据提取(之前只有视频和图片)
2026-07-17 22:15:22 +08:00