diff --git a/bizyui/js/model_apply.js b/bizyui/js/model_apply.js index 4fe7d04e..dcfa85ef 100644 --- a/bizyui/js/model_apply.js +++ b/bizyui/js/model_apply.js @@ -34,53 +34,39 @@ const NodeInfoLogger = (function() { return `${baseUrl}?filename=${filename}&subfolder=&type=${type}&rand=${Math.random()}`; }; - // 获取图片并转换为base64 + // 获取图片并转换为base64(根据 server_mode 判断逻辑) const getImageAsBase64 = async (filename, type) => { try { // 检查服务器模式 const serverModeResponse = await fetch("/bizyair/server_mode"); const serverModeData = await serverModeResponse.json(); - let token = null; - if (serverModeData.data.server_mode) { - // 服务器模式,需要token - token = await new Promise((resolve) => { - const checkToken = () => { - const token = getCookie("bizy_token"); - if (token) { - clearInterval(timer); - resolve(token); - } - }; - - const timer = setInterval(checkToken, 300); - checkToken(); // 立即执行一次检查 - }); + // 非服务器模式下,如果 filename 已经是 base64 数据,直接返回 + if (!serverModeData.data.server_mode && filename.startsWith('data:')) { + console.log('本地模式:filename 已经是 base64 数据,直接返回'); + return filename; } - - const imageUrl = buildImageUrl(filename, type); - const headers = {}; - if (token) { - headers["Authorization"] = token; + + let imageUrl; + let headers = {}; + + if (serverModeData.data.server_mode) { + // 服务器模式,改为请求后端转发接口 + imageUrl = `/bizyair/proxy_view?filename=${encodeURIComponent(filename)}`; + } else { + // 本地模式,使用原有 buildImageUrl + imageUrl = buildImageUrl(filename, type); } - const response = await fetch(imageUrl, { - headers: headers - }); + const response = await fetch(imageUrl, { headers }); if (!response.ok) { throw new Error(`获取图片失败: ${response.status} ${response.statusText}`); } const blob = await response.blob(); - - // 将blob转为File对象 + // 转 base64 const file = new File([blob], filename, { type: blob.type }); - - // 使用formatToWebp进行压缩 const { base64: compressedBase64 } = await formatToWebp(file); - return compressedBase64; - - } catch (error) { console.error('获取图片并转换为base64失败:', error); return null; @@ -121,17 +107,32 @@ const NodeInfoLogger = (function() { const blob = new Blob([byteArray], { type: mimeType || base64.split(':')[1].split(';')[0] }) return new File([blob], filename, { type: blob.type }) } - // 构建图片信息对象 - const buildImageInfo = (imageData) => { + // 构建图片信息对象(根据 server_mode 判断逻辑) + const buildImageInfo = async (imageData) => { if (!imageData?.filename) return null; - - // 根据节点类型确定图片类型 - const type = imageData.type || 'temp'; + // 检查服务器模式 + const serverModeResponse = await fetch("/bizyair/server_mode"); + const serverModeData = await serverModeResponse.json(); + const type = imageData.type || 'temp'; const path = `/${type}/${imageData.filename}`; - + let url; + + if (serverModeData.data.server_mode) { + // 服务器模式,使用 view 接口 + url = `/view?filename=${encodeURIComponent(imageData.filename)}`; + } else { + // 本地模式,如果 filename 是 base64 数据,直接使用 + if (imageData.filename.startsWith('data:')) { + url = imageData.filename; + } else { + // 否则使用 buildImageUrl 构建 URL + url = buildImageUrl(imageData.filename, type); + } + } + return { filename: imageData.filename, - url: buildImageUrl(imageData.filename, type), + url: url, path: path, type: type }; @@ -252,7 +253,7 @@ const NodeInfoLogger = (function() { // 使用异步IIFE处理图片,不阻塞主流程 (async () => { try { - const imageInfo = buildImageInfo(this.images[0]); + const imageInfo = await buildImageInfo(this.images[0]); // 检查是否存在全局bizyAirLib对象及logNodeInfo函数 if (typeof bizyAirLib !== 'undefined' && typeof bizyAirLib.logNodeInfo === 'function') { diff --git a/src/components/assistant/Sidebar.vue b/src/components/assistant/Sidebar.vue index 795e23f7..07465b70 100644 --- a/src/components/assistant/Sidebar.vue +++ b/src/components/assistant/Sidebar.vue @@ -53,7 +53,8 @@ v-if=" message.role === 'assistant' && sidebarStore.nodeInfo && - canApplyToNode(sidebarStore.nodeInfo) + canApplyToNode(sidebarStore.nodeInfo) && + !serverMode " class="image-actions" > @@ -344,10 +345,13 @@ } } + // 服务端模式 + const serverMode = ref(false) + // 生图功能 const isGeneratingImage = ref(false) - const generateImageAction = () => { + const generateImageAction = async () => { if (isLoading.value) return // 在输入框中添加生成图片前缀 @@ -426,7 +430,10 @@ // 生成成功后,添加带图片的助手消息 const assistantMessage = { role: 'assistant' as const, - content: `已为您生成图片(点击LoadImage节点可以应用)`, + // 服务端模式下只展示"已为您生成图片" + content: serverMode.value + ? '已为您生成图片' + : '已为您生成图片(点击LoadImage节点可以应用)', time: getCurrentTime(), hasImage: true, image: imageUrl @@ -835,6 +842,17 @@ } chatMessages.value = [welcomeMessage] + + // 异步获取 server_mode + ;(async () => { + try { + const res = await fetch('/bizyair/server_mode') + const data = await res.json() + serverMode.value = !!data?.data?.server_mode + } catch (e) { + serverMode.value = false + } + })() }) diff --git a/version.txt b/version.txt index fd9d1a5a..1fc5b820 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.2.14 +1.2.15