From 477d84acccde13a294c7e5ebd45bd5e1ae0d250c Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 29 Dec 2025 01:56:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DFormData=20stream?= =?UTF-8?q?=E6=9C=AA=E8=A7=A6=E5=8F=91=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8pipe=E8=A7=A6=E5=8F=91stream=E8=AF=BB?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/enhance/route.ts | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/app/api/enhance/route.ts b/app/api/enhance/route.ts index fca09efc2..bb1c99935 100644 --- a/app/api/enhance/route.ts +++ b/app/api/enhance/route.ts @@ -296,15 +296,32 @@ export async function POST(request: NextRequest) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 60000); - // 将FormData转换为Buffer(form-data包是stream) + // 将FormData转换为Buffer(form-data包是stream,需要pipe或使用getBuffer) console.log("[Enhance API] 转换FormData为Buffer..."); const formDataBuffer = await new Promise((resolve, reject) => { const chunks: Buffer[] = []; - formData.on("data", (chunk: Buffer) => chunks.push(chunk)); - formData.on("end", () => resolve(Buffer.concat(chunks))); - formData.on("error", reject); + formData.on("data", (chunk: Buffer) => { + chunks.push(chunk); + }); + formData.on("end", () => { + console.log("[Enhance API] FormData stream结束,chunks数量:", chunks.length); + resolve(Buffer.concat(chunks)); + }); + formData.on("error", (error) => { + console.error("[Enhance API] FormData stream错误:", error); + reject(error); + }); + + // 重要:form-data包需要被pipe或手动触发才能开始流式传输 + // 使用PassThrough来触发stream + const { PassThrough } = require("stream"); + const passThrough = new PassThrough(); + passThrough.on("data", () => {}); // 忽略数据,我们已经在formData上监听 + formData.pipe(passThrough); }); + console.log("[Enhance API] FormData Buffer转换完成,大小:", formDataBuffer.length, "bytes"); + // 将Buffer转换为Uint8Array用于fetch(更兼容) const uint8Array = new Uint8Array(formDataBuffer);