fix: 修复FormData stream未触发的问题,使用pipe触发stream读取
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2025-12-29 01:56:38 +08:00
parent 4d50509cf7
commit 477d84accc

View File

@ -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<Buffer>((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);