fix: 修复FormData stream未触发的问题,使用pipe触发stream读取
This commit is contained in:
parent
4d50509cf7
commit
477d84accc
@ -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);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user