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 controller = new AbortController();
|
||||||
const timeoutId = setTimeout(() => controller.abort(), 60000);
|
const timeoutId = setTimeout(() => controller.abort(), 60000);
|
||||||
|
|
||||||
// 将FormData转换为Buffer(form-data包是stream)
|
// 将FormData转换为Buffer(form-data包是stream,需要pipe或使用getBuffer)
|
||||||
console.log("[Enhance API] 转换FormData为Buffer...");
|
console.log("[Enhance API] 转换FormData为Buffer...");
|
||||||
const formDataBuffer = await new Promise<Buffer>((resolve, reject) => {
|
const formDataBuffer = await new Promise<Buffer>((resolve, reject) => {
|
||||||
const chunks: Buffer[] = [];
|
const chunks: Buffer[] = [];
|
||||||
formData.on("data", (chunk: Buffer) => chunks.push(chunk));
|
formData.on("data", (chunk: Buffer) => {
|
||||||
formData.on("end", () => resolve(Buffer.concat(chunks)));
|
chunks.push(chunk);
|
||||||
formData.on("error", reject);
|
});
|
||||||
|
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(更兼容)
|
// 将Buffer转换为Uint8Array用于fetch(更兼容)
|
||||||
const uint8Array = new Uint8Array(formDataBuffer);
|
const uint8Array = new Uint8Array(formDataBuffer);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user