From 6dd75c502a1475aba4e7e9389f224086ad28af76 Mon Sep 17 00:00:00 2001 From: WuYongJie Date: Thu, 7 May 2026 17:19:15 +0800 Subject: [PATCH] fix(intake): avoid empty chunk upload 502 --- .../api/intake/non-integrated/[id]/upload/chunk/route.ts | 6 ++++-- .../src/app/api/intake/non-integrated/upload/route.test.ts | 5 +++-- .../src/app/intake/non-integrated/nonIntegratedApi.ts | 5 ++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/furniture-3d-system/src/app/api/intake/non-integrated/[id]/upload/chunk/route.ts b/furniture-3d-system/src/app/api/intake/non-integrated/[id]/upload/chunk/route.ts index 0b46a125..482dddc1 100644 --- a/furniture-3d-system/src/app/api/intake/non-integrated/[id]/upload/chunk/route.ts +++ b/furniture-3d-system/src/app/api/intake/non-integrated/[id]/upload/chunk/route.ts @@ -151,10 +151,12 @@ export async function POST(request: NextRequest, context: RouteContext) { const uploadedChunks = savedChunks.filter(Boolean).length if (uploadedChunks < totalChunks) { - return new NextResponse(null, { - status: 204, + return new NextResponse('', { + status: 200, headers: { 'Cache-Control': 'no-store', + 'Content-Length': '0', + 'X-Upload-Chunk-Status': 'pending', }, }) } diff --git a/furniture-3d-system/src/app/api/intake/non-integrated/upload/route.test.ts b/furniture-3d-system/src/app/api/intake/non-integrated/upload/route.test.ts index 9fa05a28..e1890ef4 100644 --- a/furniture-3d-system/src/app/api/intake/non-integrated/upload/route.test.ts +++ b/furniture-3d-system/src/app/api/intake/non-integrated/upload/route.test.ts @@ -309,8 +309,9 @@ describe('POST /api/intake/non-integrated/upload', () => { } const firstResponse = await uploadChunk(0, fileBytes.slice(0, 10)) - expect(firstResponse.status).toBe(204) - expect(firstResponse.body).toBeNull() + expect(firstResponse.status).toBe(200) + expect(firstResponse.headers.get('X-Upload-Chunk-Status')).toBe('pending') + await expect(firstResponse.text()).resolves.toBe('') const completedResponse = await uploadChunk(1, fileBytes.slice(10)) const completedPayload = await completedResponse.json() diff --git a/furniture-3d-system/src/app/intake/non-integrated/nonIntegratedApi.ts b/furniture-3d-system/src/app/intake/non-integrated/nonIntegratedApi.ts index 6937e561..c38213c4 100644 --- a/furniture-3d-system/src/app/intake/non-integrated/nonIntegratedApi.ts +++ b/furniture-3d-system/src/app/intake/non-integrated/nonIntegratedApi.ts @@ -222,7 +222,10 @@ async function uploadNonIntegratedFileInChunks(params: { }, ) - if (response.status === 204) { + if ( + response.status === 204 || + response.headers.get('X-Upload-Chunk-Status') === 'pending' + ) { continue }