From ae176cba449d1f9503368cd03a795cc222544f43 Mon Sep 17 00:00:00 2001 From: 134 Date: Sat, 4 Jul 2026 12:02:29 +0800 Subject: [PATCH] fix: timeout remote image downloads --- lib/ai/rmbg/service.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/ai/rmbg/service.ts b/lib/ai/rmbg/service.ts index 97438fe0b..0916f9150 100644 --- a/lib/ai/rmbg/service.ts +++ b/lib/ai/rmbg/service.ts @@ -63,6 +63,7 @@ const AOS_MAX_RESOLUTION = 4096; const AOS_CREATE_TIMEOUT_MS = 120_000; const AOS_POLL_TIMEOUT_MS = 60_000; const AOS_DOWNLOAD_TIMEOUT_MS = 60_000; +const IMAGE_URL_FETCH_TIMEOUT_MS = 60_000; async function createThumbnail(buffer: Buffer, mimeType: string): Promise { try { @@ -499,14 +500,16 @@ function getModelId(provider: RmbgProvider) { export async function fetchImageBufferFromUrl(imageUrl: string): Promise { try { - const imageResponse = await fetch(imageUrl); - if (!imageResponse.ok) { - throw new RmbgServiceError( - `无法获取图片: ${imageResponse.status} ${imageResponse.statusText}`, - 400 - ); - } - return Buffer.from(await imageResponse.arrayBuffer()); + return await withTimeout(async (signal) => { + const imageResponse = await fetch(imageUrl, { signal }); + if (!imageResponse.ok) { + throw new RmbgServiceError( + `无法获取图片: ${imageResponse.status} ${imageResponse.statusText}`, + 400 + ); + } + return Buffer.from(await imageResponse.arrayBuffer()); + }, IMAGE_URL_FETCH_TIMEOUT_MS); } catch (error) { if (error instanceof RmbgServiceError) { throw error;