3.3 KiB
3.3 KiB
视频下载同源修复 + Day 日志拆分归档 (Day 32)
概述
今天主要处理“下载行为不符合预期”的问题:
- 修复首页与发布成功弹窗点击下载时被浏览器当作在线播放(新开标签页)的问题。
- 将下载修复开始后的开发内容从
Day31拆分到Day32,保持日志按天清晰归档。
✅ 1) 视频下载链路修复(避免新开标签页播放)
问题现象
- 首页“下载视频”与发布成功弹窗“下载视频备份”在部分浏览器会打开新标签页播放视频,而不是直接触发下载。
- 根因是跨域签名 URL 场景下,浏览器可能忽略
<a download>。
修复方案
- 后端新增同源下载接口:
GET /api/videos/generated/{video_id}/download- 使用
FileResponse返回本地视频文件 - 显式返回
Content-Disposition: attachment - 浏览器直接进入保存文件流程
- 使用
- 发布成功弹窗下载改为传
videoId,不再依赖签名 URL。 - 首页作品预览下载同步改为同源下载接口,下载行为与发布弹窗统一。
- 兼容旧清理状态:
CleanupContext对旧videoDownloadUrl持久化字段做videoId解析回填。
✅ 2) 配套调整与文档拆分
前端联动
CleanupContext继续沿用“清理失败不关弹窗、不清本地”的逻辑,下载链路仅替换为同源接口。- 首页
PreviewPanel支持传入generatedVideoId,下载按钮优先走/api/videos/generated/{id}/download。
日志归档
- 将“下载修复开始后的内容”从
Day31移出并归档到Day32。 Day31保留 Day31 当日核心内容(到 cleanup 链路加固为止)。
📁 今日主要修改文件
| 文件 | 改动 |
|---|---|
backend/app/modules/videos/router.py |
新增 GET /api/videos/generated/{video_id}/download,返回 attachment 下载响应 |
frontend/src/features/publish/model/usePublishController.ts |
发布成功后 triggerCleanup() 传 video.id(替换签名 URL) |
frontend/src/shared/contexts/CleanupContext.tsx |
下载字段改为 videoId;兼容旧 videoDownloadUrl 回填;下载按钮改同源路径 |
frontend/src/features/home/ui/PreviewPanel.tsx |
首页下载改为同源下载接口 |
frontend/src/features/home/ui/HomePage.tsx |
透传 generatedVideoId 给 PreviewPanel |
Docs/DevLogs/Day31.md |
移除下载修复章节与对应验证/覆盖项(迁入 Day32) |
Docs/TASK_COMPLETE.md |
新增 Day32 Current 区块,Day31 取消 Current |
Docs/BACKEND_README.md |
补充 /api/videos/generated/{video_id}/download 接口说明 |
Docs/BACKEND_DEV.md |
补充下载接口 attachment 约定 |
Docs/FRONTEND_README.md |
补充首页/发布弹窗下载统一同源接口说明 |
Docs/FRONTEND_DEV.md |
补充 CleanupContext 下载策略规范 |
Docs/PUBLISH_DEPLOY.md |
补充发布成功后同源下载联动说明 |
README.md |
补充“一键下载直达(同源 attachment)”能力描述 |
🔍 验证记录
python -m py_compile backend/app/modules/videos/router.py✅npm run build(frontend)✅pm2 restart vigent2-frontend✅pm2 restart vigent2-backend✅curl http://127.0.0.1:8006/health返回{"status":"ok"}✅