diff --git a/apps/web/src/components/voice/CloneModal.tsx b/apps/web/src/components/voice/CloneModal.tsx index b962f2938..1162fda71 100644 --- a/apps/web/src/components/voice/CloneModal.tsx +++ b/apps/web/src/components/voice/CloneModal.tsx @@ -14,7 +14,8 @@ import React, { useState, useCallback, useRef, useEffect } from "react"; import { Modal, Button } from "@/components/ui"; import { createVoiceClone, toVoiceClone } from "@/api/voiceClone"; import type { VoiceClone } from "@/api/voiceClone"; -import { uploadAsset } from "@/api/assets"; +import { uploadAsset, ensureDefaultLibrary } from "@/api/assets"; +import { getOrCreateDefaultProject } from "@/api/projects"; import "./clone-modal.css"; /* ── 类型定义 ───────────────────────────────────────────── */ @@ -334,8 +335,14 @@ const CloneModal: React.FC = ({ ); } + // 获取默认项目和素材库(后端 /upload 接口必填) + const project = await getOrCreateDefaultProject(); + const library = await ensureDefaultLibrary({ project_id: project.id, kind: "voice" }); + const formData = new FormData(); formData.append("file", fileToUpload); + formData.append("project_id", project.id); + formData.append("library_id", library.id); const uploadResult = await uploadAsset(formData); // 阶段 2:克隆