feat: 所有API返回的音频URL加OSS预签名(24小时有效期) #216

Merged
xiaoxia merged 2 commits from fix/tts-audio-url-presign into develop 2026-07-11 11:07:51 +08:00
Owner

问题

TTS 合成虽然通了,但 output_audio_url 返回的是 OSS 裸 URL,私有 bucket 下前端访问 403。

修复

跟视频生成的 download_url 一样,对所有 API 返回的音频 URL 统一加 OSS 预签名(slash_safe=True,24小时有效期)。

覆盖范围

模块 接口 字段
TTS合成 列表/详情/状态/保存到配音库 output_audio_url, audio_url
音色克隆 列表/详情/创建/重试 source_audio_url
配音库 统一列表/旧列表/详情/创建/更新 audio_url

实现

  • 新增 get_audio_url_signer() 依赖,返回签名函数(空URL直接返回,签名失败回退原始URL)
  • 各路由的 _to_response 函数接受 sign_url 可选参数,对音频URL字段做签名
  • 复用现有 OSSStorageService.get_download_url(),逻辑与视频下载URL完全一致

测试

  • 新增 5 个单元测试覆盖签名函数行为
  • 全量 1294 个单元测试全绿,8 skipped
## 问题 TTS 合成虽然通了,但 output_audio_url 返回的是 OSS 裸 URL,私有 bucket 下前端访问 403。 ## 修复 跟视频生成的 download_url 一样,对所有 API 返回的音频 URL 统一加 OSS 预签名(slash_safe=True,24小时有效期)。 ## 覆盖范围 | 模块 | 接口 | 字段 | |------|------|------| | TTS合成 | 列表/详情/状态/保存到配音库 | output_audio_url, audio_url | | 音色克隆 | 列表/详情/创建/重试 | source_audio_url | | 配音库 | 统一列表/旧列表/详情/创建/更新 | audio_url | ## 实现 - 新增 `get_audio_url_signer()` 依赖,返回签名函数(空URL直接返回,签名失败回退原始URL) - 各路由的 `_to_response` 函数接受 `sign_url` 可选参数,对音频URL字段做签名 - 复用现有 `OSSStorageService.get_download_url()`,逻辑与视频下载URL完全一致 ## 测试 - 新增 5 个单元测试覆盖签名函数行为 - 全量 1294 个单元测试全绿,8 skipped
xiaoxia added 1 commit 2026-07-11 11:02:13 +08:00
feat: 所有API返回的音频URL加OSS预签名(24小时有效期)
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 8s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m0s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
a4a610a93d
修复私有bucket下TTS合成音频、音色克隆参考音频、配音库音频等返回403的问题。

改动范围:
- app/dependencies.py: 新增 get_audio_url_signer(),返回24小时有效期的预签名函数
- app/api/routes/tts.py: TTS任务列表/详情/状态/保存到配音库 的 output_audio_url / audio_url 全部加签名
- app/api/routes/voice_clones.py: 音色克隆列表/详情/创建/重试 的 source_audio_url 加签名
- app/api/routes/voices.py: 配音库列表/详情/创建/更新 的 audio_url 全部加签名
- tests/unit/test_audio_url_presign.py: 5个单元测试覆盖签名函数行为
xiaoxia added 1 commit 2026-07-11 11:04:54 +08:00
style: 修复isort import排序
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 8s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m12s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
76b1a1d10d
xiaoxia merged commit 841a168d30 into develop 2026-07-11 11:07:51 +08:00
xiaoxia deleted branch fix/tts-audio-url-presign 2026-07-11 11:07:51 +08:00
Sign in to join this conversation.