fix(worker): 素材下载改用storage_key字段,修复file_url为URL导致下载无效文件 #480

Merged
xiaoxia merged 5 commits from fix/download-asset-storage-key into develop 2026-07-17 19:14:37 +08:00
Owner

问题

_download_assets 中使用 a.file_url 作为 OSS key 下载素材,但 file_url 是带签名的完整URL(用于客户端访问),不是 OSS 存储键。导致 worker 下载下来的文件是无效的,ffmpeg 报 moov atom not found

修复

  • AssetModel 新增 storage_key 字段(真正的 OSS 存储键)
  • render_adapter._download_assets() 改用 a.storage_key
  • render_adapter._prepare_bgm() 素材库BGM下载改用 storage_key
  • legacy 路径 edit_plan_generation.py 同步修复
  • generation.py BGM素材库下载同步修复
  • asset_repository 映射同步更新(storage_key 字段)
  • 单元测试同步更新,35个测试全绿

影响范围

  • worker 渲染链路素材下载
  • worker BGM 素材库下载
  • legacy 渲染链路素材下载

注意

  • 线上存量数据需要 backfill:将 file_url 中的值同步到 storage_key 字段(如果 file_url 存的是key则直接拷,如果是URL需要提取path)
## 问题 `_download_assets` 中使用 `a.file_url` 作为 OSS key 下载素材,但 `file_url` 是带签名的完整URL(用于客户端访问),不是 OSS 存储键。导致 worker 下载下来的文件是无效的,ffmpeg 报 `moov atom not found`。 ## 修复 - AssetModel 新增 `storage_key` 字段(真正的 OSS 存储键) - `render_adapter._download_assets()` 改用 `a.storage_key` - `render_adapter._prepare_bgm()` 素材库BGM下载改用 `storage_key` - legacy 路径 `edit_plan_generation.py` 同步修复 - `generation.py` BGM素材库下载同步修复 - `asset_repository` 映射同步更新(storage_key 字段) - 单元测试同步更新,35个测试全绿 ## 影响范围 - worker 渲染链路素材下载 - worker BGM 素材库下载 - legacy 渲染链路素材下载 ## 注意 - 线上存量数据需要 backfill:将 file_url 中的值同步到 storage_key 字段(如果 file_url 存的是key则直接拷,如果是URL需要提取path)
xiaoxia added 1 commit 2026-07-17 18:05:27 +08:00
fix(worker): 素材下载改用storage_key字段,修复file_url为URL导致下载无效文件
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Failing after 0s
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 Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration 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 13s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 40s
AI Code Review / AI Code Review (pull_request) Failing after 1m23s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m47s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 3m6s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 3m27s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 1m5s
8e2e352cfe
- AssetModel新增storage_key字段(OSS存储键)
- render_adapter _download_assets改用a.storage_key
- render_adapter BGM下载改用storage_key
- edit_plan_generation legacy路径同步修复
- generation.py BGM下载同步修复
- asset_repository映射同步更新storage_key字段
- 单元测试同步更新
xiaoxia added 1 commit 2026-07-17 18:29:59 +08:00
fix(worker): 补alembic迁移+schema快照+asset_repository单测,修复CI 3红
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
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Failing after 0s
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 E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration 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
AI Code Review / AI Code Review (pull_request) Failing after 33s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 4m9s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 6s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 42s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
0b073a8648
- 新增042号迁移:assets表加storage_key字段
- 更新schema-metadata-snapshot.json快照
- 新增SQLAlchemyAssetRepository的storage_key单测(create/update/to_domain fallback)
xiaoxia added 1 commit 2026-07-17 18:52:56 +08:00
fix(ci): 修复diff-cover no merge base错误,基于base分支创建当前分支
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
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Failing after 1s
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 / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (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 13s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 38s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m16s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m20s
AI Code Review / AI Code Review (pull_request) Successful in 4m3s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 4m35s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 5m1s
344516a6a2
xiaoxia added 1 commit 2026-07-17 19:05:49 +08:00
revert: 回滚误改的CI配置,#480只做后端修复
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
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Failing after 0s
CI Build & Deploy Pipeline / Build Staging Worker Image (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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration 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 13s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 49s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m10s
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 2m40s
d7aa767611
Collaborator

代码审查结果 - PR #480

⚠️ 问题(2个需要修改)

  1. packages/adapters/sqlalchemy_impl/asset_repository.py 第75行, 第103行file_url 字段被错误地赋值为 storage_key

    • 问题描述:代码中 file_url=asset.storage_key 将内部存储键赋值给了 file_url 字段。根据 models.py 中的注释,file_url 定义为“完整可访问的 URL”,而 storage_key 是“OSS 存储键/路径”。如果客户端依赖 file_url 字段获取资源链接,此变更会导致客户端获取到错误的路径(而非完整的 http/https URL),从而造成资源无法访问。
    • 修改建议:确认 file_url 的用途。如果需要保留 file_url 为完整 URL,应保留原有的生成逻辑或根据 storage_key 拼接完整 URL;如果 file_url 字段已被废弃,不应继续写入数据或应明确注释其不再作为对外接口。
  2. .gitea/workflows/ci-cd.yml 第354行:使用了未定义的环境变量 HAS_APP_CHANGES

    • 问题描述:在 "Diff coverage check" 步骤的 if 条件中引用了 env.HAS_APP_CHANGES,但在 "Select incremental test files" 步骤的脚本逻辑中并未设置该环境变量(仅设置了 UNIT_TEST_MODESELECTED_TEST_FILES)。这会导致该条件判断失败或报错,使得增量覆盖率检查步骤被意外跳过。
    • 修改建议:在 "Select incremental test files" 步骤中增加逻辑,根据是否有改动文件设置 HAS_APP_CHANGES 环境变量(例如 echo "HAS_APP_CHANGES=true" >> $GITHUB_ENV)。

💡 建议(2个可选)

  1. alembic/versions/042_add_storage_key_to_assets.py 第20行:字段长度限制风险。

    • 具体内容:新增的 storage_key 字段长度限制为 String(500),而原有的 file_urlString(1000)。虽然通常存储键比 URL 短,但如果存在长路径或特殊命名,可能会导致数据截断或写入失败。建议确认历史数据中路径长度是否均在 500 以内,或适当放宽限制。
  2. .gitea/workflows/ci-cd.yml 第268行:API 查询限制。

    • 具体内容:curl 请求 API 时使用了 limit=300。如果 PR 涉及的文件变动超过 300 个,将无法获取完整的变动列表,导致增量测试文件选择不完整。建议在日志中增加提示,或处理分页逻辑(虽然对于 CI 场景 300 个通常已足够,但存在边界情况)。

格式检查通过 | 逻辑审查需修改 | 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-17 19:08:22 | 模型:

## 代码审查结果 - PR #480 ### ⚠️ 问题(2个需要修改) 1. **packages/adapters/sqlalchemy_impl/asset_repository.py 第75行, 第103行**:`file_url` 字段被错误地赋值为 `storage_key`。 - 问题描述:代码中 `file_url=asset.storage_key` 将内部存储键赋值给了 `file_url` 字段。根据 `models.py` 中的注释,`file_url` 定义为“完整可访问的 URL”,而 `storage_key` 是“OSS 存储键/路径”。如果客户端依赖 `file_url` 字段获取资源链接,此变更会导致客户端获取到错误的路径(而非完整的 http/https URL),从而造成资源无法访问。 - 修改建议:确认 `file_url` 的用途。如果需要保留 `file_url` 为完整 URL,应保留原有的生成逻辑或根据 `storage_key` 拼接完整 URL;如果 `file_url` 字段已被废弃,不应继续写入数据或应明确注释其不再作为对外接口。 2. **.gitea/workflows/ci-cd.yml 第354行**:使用了未定义的环境变量 `HAS_APP_CHANGES`。 - 问题描述:在 "Diff coverage check" 步骤的 `if` 条件中引用了 `env.HAS_APP_CHANGES`,但在 "Select incremental test files" 步骤的脚本逻辑中并未设置该环境变量(仅设置了 `UNIT_TEST_MODE` 和 `SELECTED_TEST_FILES`)。这会导致该条件判断失败或报错,使得增量覆盖率检查步骤被意外跳过。 - 修改建议:在 "Select incremental test files" 步骤中增加逻辑,根据是否有改动文件设置 `HAS_APP_CHANGES` 环境变量(例如 `echo "HAS_APP_CHANGES=true" >> $GITHUB_ENV`)。 ### 💡 建议(2个可选) 1. **alembic/versions/042_add_storage_key_to_assets.py 第20行**:字段长度限制风险。 - 具体内容:新增的 `storage_key` 字段长度限制为 `String(500)`,而原有的 `file_url` 为 `String(1000)`。虽然通常存储键比 URL 短,但如果存在长路径或特殊命名,可能会导致数据截断或写入失败。建议确认历史数据中路径长度是否均在 500 以内,或适当放宽限制。 2. **.gitea/workflows/ci-cd.yml 第268行**:API 查询限制。 - 具体内容:`curl` 请求 API 时使用了 `limit=300`。如果 PR 涉及的文件变动超过 300 个,将无法获取完整的变动列表,导致增量测试文件选择不完整。建议在日志中增加提示,或处理分页逻辑(虽然对于 CI 场景 300 个通常已足够,但存在边界情况)。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-17 19:08:22 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia added 1 commit 2026-07-17 19:08:23 +08:00
fix(ci): 修复diff-cover no merge base错误,基于base分支建分支后再覆盖PR代码
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Failing after 0s
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 / 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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 9s
AI Code Review / AI Code Review (pull_request) Failing after 36s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 44s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m28s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m45s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m21s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 4m9s
24555d1115
auto-approve-bot approved these changes 2026-07-17 19:12:32 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-17 19:12:32 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia merged commit 897340c488 into develop 2026-07-17 19:14:37 +08:00
Sign in to join this conversation.