diff --git a/server/routers/back-new/features/image/image.controller.js b/server/routers/back-new/features/image/image.controller.js index b0ccd7d..ada3233 100644 --- a/server/routers/back-new/features/image/image.controller.js +++ b/server/routers/back-new/features/image/image.controller.js @@ -110,6 +110,20 @@ async function fetchImageContent(accessToken, imageId) { } } +// 工具函数:异步重试 +async function retryAsync(fn, times = 3, delay = 800) { + let lastErr; + for (let i = 0; i < times; i++) { + try { + return await fn(); + } catch (err) { + lastErr = err; + if (i < times - 1 && delay) await new Promise(r => setTimeout(r, delay)); + } + } + throw lastErr; +} + exports.generate = async (req, res) => { const { prompt } = req.query; if (!prompt) { @@ -122,14 +136,17 @@ exports.generate = async (req, res) => { return res.status(500).json({ error: e.message }); } try { - const content = await fetchChatContent(accessToken, prompt); - const match = content.match(/ fetchChatContent(accessToken, prompt), 3, 800); + // 升级正则,兼容更多图片标签格式 + const match = content.match(/]+src=['"]([^'"]+)['"]/); if (!match) { console.error('AI生成图片出错: GigaChat未返回图片标签'); return res.status(500).json({ error: 'No image generated' }); } const imageId = match[1]; - const imageData = await fetchImageContent(accessToken, imageId); + // 2. 重试获取图片内容 + const imageData = await retryAsync(() => fetchImageContent(accessToken, imageId), 3, 800); res.set('Content-Type', 'image/jpeg'); res.set('X-HATEOAS', JSON.stringify(makeLinks('/gigachat', { self: '/prompt' }))); res.send(imageData);