Files
ViGent2/Docs/DevLogs/Day32.md
Kevin Wong 23ff4ff86e 更新
2026-03-04 14:07:54 +08:00

3.3 KiB
Raw Blame History

视频下载同源修复 + Day 日志拆分归档 (Day 32)

概述

今天主要处理“下载行为不符合预期”的问题:

  1. 修复首页与发布成功弹窗点击下载时被浏览器当作在线播放(新开标签页)的问题。
  2. 将下载修复开始后的开发内容从 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 透传 generatedVideoIdPreviewPanel
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 buildfrontend
  • pm2 restart vigent2-frontend
  • pm2 restart vigent2-backend
  • curl http://127.0.0.1:8006/health 返回 {"status":"ok"}