diff --git a/data/assets/ending.mp4 b/data/assets/ending.mp4 new file mode 100644 index 0000000..bd7f838 Binary files /dev/null and b/data/assets/ending.mp4 differ diff --git a/data/latest.zip b/data/latest.zip deleted file mode 100644 index 5f7c770..0000000 Binary files a/data/latest.zip and /dev/null differ diff --git a/src/app.ts b/src/app.ts index cffa3c5..4cb5e0c 100644 --- a/src/app.ts +++ b/src/app.ts @@ -38,7 +38,6 @@ export default async function startServe(randomPort: Boolean = false) { console.log("文件目录:", ossDir); app.use("/oss", express.static(ossDir)); // skills 静态资源 - const skillsDir = u.getPath("skills"); if (!fs.existsSync(skillsDir)) { fs.mkdirSync(skillsDir, { recursive: true }); @@ -53,6 +52,14 @@ export default async function startServe(randomPort: Boolean = false) { express.static(skillsDir), ); + // assets 静态资源 + const assetsDir = u.getPath("assets"); + if (!fs.existsSync(assetsDir)) { + fs.mkdirSync(assetsDir, { recursive: true }); + } + console.log("文件目录:", assetsDir); + app.use("/assets", express.static(assetsDir)); + // data/web 静态网站 const webDir = u.getPath("web"); if (fs.existsSync(webDir)) { diff --git a/src/routes/assets/getMaterialData.ts b/src/routes/assets/getMaterialData.ts index b3e5ebe..eec2309 100644 --- a/src/routes/assets/getMaterialData.ts +++ b/src/routes/assets/getMaterialData.ts @@ -26,7 +26,7 @@ export default router.post( })), ); //拿到本地片尾视频并插入到data中 - const ending = await u.oss.getFileUrl("/ending/1d7a2dfdd0c057823797fdf97677a7a0.mp4"); + const ending = await u.oss.getFileUrl("/ending.mp4", "assets"); data.push({ id: 0, name: "片尾", diff --git a/src/routes/production/assets/updateAssetsUrl.ts b/src/routes/production/assets/updateAssetsUrl.ts index 6317e83..906165a 100644 --- a/src/routes/production/assets/updateAssetsUrl.ts +++ b/src/routes/production/assets/updateAssetsUrl.ts @@ -16,7 +16,7 @@ export default router.post( async (req, res) => { const { id, url, flowId } = req.body; const [imageId] = await u.db("o_image").insert({ - filePath: new URL(url).pathname, + filePath: u.replaceUrl(url), state: "已完成", assetsId: id, }); diff --git a/src/routes/production/editImage/saveImageFlow.ts b/src/routes/production/editImage/saveImageFlow.ts index ce3e2a6..b3c2380 100644 --- a/src/routes/production/editImage/saveImageFlow.ts +++ b/src/routes/production/editImage/saveImageFlow.ts @@ -13,7 +13,15 @@ export default router.post( }), async (req, res) => { const { edges, nodes } = req.body; + nodes.forEach((node: any) => { + if (node.type == "upload") { + node.data.image = node.data.image ? u.replaceUrl(node.data.image) : ""; + } + if (node.type == "generated") { + node.data.generatedImage = node.data.generatedImage ? u.replaceUrl(node.data.generatedImage) : ""; + } + }); const [insertFlowId] = await u.db("o_imageFlow").insert({ flowData: JSON.stringify({ edges, nodes }), }); diff --git a/src/routes/production/editImage/updateImageFlow.ts b/src/routes/production/editImage/updateImageFlow.ts index f22ce67..1c4bbd9 100644 --- a/src/routes/production/editImage/updateImageFlow.ts +++ b/src/routes/production/editImage/updateImageFlow.ts @@ -10,39 +10,19 @@ export default router.post( validateFields({ edges: z.any(), nodes: z.any(), - id: z.number(), - imageUrl: z.string(), flowId: z.number(), - episodesId: z.number(), }), async (req, res) => { const { edges, nodes, flowId } = req.body; nodes.forEach((node: any) => { if (node.type == "upload") { - node.data.image = node.data.image ? new URL(node.data.image).pathname : ""; + node.data.image = node.data.image ? u.replaceUrl(node.data.image) : ""; } + if (node.type == "generated") { - node.data.generatedImage = node.data.generatedImage ? new URL(node.data.generatedImage).pathname : ""; + node.data.generatedImage = node.data.generatedImage ? u.replaceUrl(node.data.generatedImage) : ""; } }); - // let imagePath = ""; - // try { - // imagePath = new URL(imageUrl).pathname; - // } catch (e) {} - // if (imagePath) { - // if (type == "storyboard") { - // await u.db("o_storyboard").where("id", id).update({ - // filePath: imagePath, - // }); - // } else { - // const [imageId] = await u.db("o_image").insert({ - // filePath: imagePath, - // assetsId: id, - // state: "已完成", - // }); - // await u.db("o_assets").where("id", id).update({ imageId }); - // } - // } await u .db("o_imageFlow") diff --git a/src/routes/production/getFlowData.ts b/src/routes/production/getFlowData.ts index 50818bf..4afd932 100644 --- a/src/routes/production/getFlowData.ts +++ b/src/routes/production/getFlowData.ts @@ -116,6 +116,7 @@ export default router.post( prompt: item.prompt ?? "", desc: item.describe ?? "", src: item.filePath && (await u.oss.getFileUrl(item.filePath!)), + flowId: item.flowId, derive: await Promise.all( childAssetsData .filter((child) => child.assetsId === item.id) @@ -129,6 +130,7 @@ export default router.post( src: child.filePath && (await u.oss.getFileUrl(child.filePath!)), state: child.state ?? "未生成", errorReason: child?.errorReason ?? "", + flowId: child.flowId, })), ), })), @@ -145,6 +147,7 @@ export default router.post( videoDesc: i.videoDesc, shouldGenerateImage: i.shouldGenerateImage, reason: i?.reason ?? "", + flowId: i.flowId, })) .sort((a, b) => (a.index ?? 0) - (b.index ?? 0)); res.status(200).send(success(flowData)); diff --git a/src/routes/production/storyboard/addStoryboard.ts b/src/routes/production/storyboard/addStoryboard.ts index 54aebf1..64ecdae 100644 --- a/src/routes/production/storyboard/addStoryboard.ts +++ b/src/routes/production/storyboard/addStoryboard.ts @@ -35,7 +35,7 @@ export default router.post( prompt, duration, state, - filePath: new URL(src).pathname, + filePath: u.replaceUrl(src), trackId, videoDesc, shouldGenerateImage: src ? 1 : 0, diff --git a/src/routes/production/storyboard/updateStoryboardUrl.ts b/src/routes/production/storyboard/updateStoryboardUrl.ts index 708f43f..d8c195f 100644 --- a/src/routes/production/storyboard/updateStoryboardUrl.ts +++ b/src/routes/production/storyboard/updateStoryboardUrl.ts @@ -19,7 +19,7 @@ export default router.post( .db("o_storyboard") .where({ id }) .update({ - filePath: new URL(url).pathname, + filePath: u.replaceUrl(url), flowId, state: "已完成", shouldGenerateImage:url ? 1 : 0 diff --git a/src/utils.ts b/src/utils.ts index c7a584d..83cc36c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -10,6 +10,7 @@ import task from "@/utils/taskRecord"; import Ai from "@/utils/ai"; import { getPrompts } from "@/utils/getPrompts"; import { getArtPrompt } from "@/utils/getArtPrompt"; +import replaceUrl from "@/utils/replaceUrl"; export default { db, @@ -24,4 +25,5 @@ export default { task, getPrompts, getArtPrompt, + replaceUrl }; diff --git a/src/utils/replaceUrl.ts b/src/utils/replaceUrl.ts new file mode 100644 index 0000000..bcdfec8 --- /dev/null +++ b/src/utils/replaceUrl.ts @@ -0,0 +1,12 @@ +export default function replaceUrl(url: string): string { + if (typeof url !== 'string' || !url.trim()) return ''; + let cleanedPath = ''; + try { + const pathname = new URL(url).pathname; + cleanedPath = pathname.replace(/^\/oss/, ''); + } catch (e) { + // 如果不是有效的URL,则直接返回原字符串 + cleanedPath = url; + } + return cleanedPath; +}