feat(#1714): 前端 prepare 短路(后端 skip_transfer 命中时跳过 OSS 直传) #1729
Reference in New Issue
Block a user
Delete Branch "feat/1714-prepare-skip-transfer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
Issue #1714 后续——后端
prepare_direct_upload已支持skip_transfer/duplicated字段:当 file_hash 命中素材库已有相同文件时,返回这两个字段为 true,前端应识别并跳过 OSS 直传 + complete 阶段。改动
api/assets/types.tsDirectUploadPrepareResult扩展:duplicated?: boolean+skip_transfer?: boolean,兼容新旧后端(旧后端不返回则走老流程)pages/assets/hooks/useAssetUpload.ts(队列链路)h.prepared.skip_transfer || h.prepared.duplicatedupdateItem(tempId, { status: "done", duplicated: true, assetId })api/assets/upload.ts(非队列链路:配音/封面/克隆)uploadAssetDirectprepare 后同样判断 skip_transfer/duplicated{ storage_key, ingest_job_id: "", url: "", duplicated: true, asset_id }测试
useAssetUpload.test.tsx:新增 prepare 返回 skip_transfer=true 用例(队列场景),断言 transfer/complete 不被调用、标记 done+duplicatedassets.test.ts:新增uploadAssetDirect skip_transfer 短路describe 两个用例验证
说明
prepare_direct_upload返回 skip_transfer/duplicated 字段已由 #1719 系列合入 develop【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
enqueueUploads函数的for循环中,当检测到文件去重(skip_transfer或duplicated为 true)时,代码执行了return语句。这将导致函数提前退出,循环终止,队列中当前文件之后的所有文件将无法被处理和上传。return改为continue,确保跳过当前去重文件后,继续处理队列中的后续文件。💡 改进建议(不阻塞合并)
[apps/web/src/pages/assets/hooks/useAssetUpload.ts] 列表刷新性能优化
refreshList()。如果用户一次性上传多个重复文件,会触发多次列表刷新请求,造成不必要的性能开销和网络压力。建议在循环结束后统一刷新,或者使用防抖机制控制刷新频率。[apps/web/src/api/assets/upload.ts] 返回值健壮性检查
asset_id直接取自handle.prepared.asset_id,该字段在接口定义中是可选的。虽然根据业务逻辑后端应该会返回,但如果后端接口异常或数据不一致,前端将返回undefined。建议增加对该字段存在性的校验或注释说明依赖后端强契约。✅ 良好实践
skip_transfer为 true 和 false 的场景,确保了核心逻辑的可靠性。🤖 由 AI 代码审查机器人自动生成 | 2026-09-06 03:40:00 | 模型:
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1729 已关闭或合并,对应的预览环境已被清理。