From 58d57fa148fe23328372ebe8582c0ed39d8ea317 Mon Sep 17 00:00:00 2001 From: imbytecat Date: Thu, 5 Mar 2026 16:32:41 +0800 Subject: [PATCH] =?UTF-8?q?refactor(server):=20=E4=BD=BF=E7=94=A8=20multip?= =?UTF-8?q?art=20File=20=E6=9B=BF=E4=BB=A3=E6=8A=A5=E5=91=8A=20ZIP=20?= =?UTF-8?q?=E7=9A=84=20base64=20=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/server/src/server/api/contracts/crypto.contract.ts | 2 +- apps/server/src/server/api/routers/crypto.router.ts | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/server/src/server/api/contracts/crypto.contract.ts b/apps/server/src/server/api/contracts/crypto.contract.ts index 785f926..052e48f 100644 --- a/apps/server/src/server/api/contracts/crypto.contract.ts +++ b/apps/server/src/server/api/contracts/crypto.contract.ts @@ -55,7 +55,7 @@ export const signAndPackReport = oc enterpriseId: z.string().min(1), inspectionId: z.string().min(1), summary: z.string().min(1), - rawZipBase64: z.string().min(1), + rawZip: z.file().mime(['application/zip', 'application/x-zip-compressed']), }), ) .output( diff --git a/apps/server/src/server/api/routers/crypto.router.ts b/apps/server/src/server/api/routers/crypto.router.ts index 071b6c4..ee3cf6c 100644 --- a/apps/server/src/server/api/routers/crypto.router.ts +++ b/apps/server/src/server/api/routers/crypto.router.ts @@ -222,11 +222,12 @@ export const encryptSummary = os.crypto.encryptSummary.use(db).handler(async ({ export const signAndPackReport = os.crypto.signAndPackReport.use(db).handler(async ({ context, input }) => { const device = await getDevice(context, input.deviceId) - const rawZipBytes = Buffer.from(input.rawZipBase64, 'base64') + const rawZipArrayBuffer = await input.rawZip.arrayBuffer() + const rawZipBytes = Buffer.from(rawZipArrayBuffer) if (rawZipBytes.byteLength === 0 || rawZipBytes.byteLength > MAX_RAW_ZIP_BYTES) { throw new ORPCError('BAD_REQUEST', { - message: 'rawZipBase64 is empty or exceeds max size limit', + message: 'rawZip is empty or exceeds max size limit', }) } @@ -234,7 +235,7 @@ export const signAndPackReport = os.crypto.signAndPackReport.use(db).handler(asy checkCRC32: true, }).catch(() => { throw new ORPCError('BAD_REQUEST', { - message: 'rawZipBase64 is not a valid zip file', + message: 'rawZip is not a valid zip file', }) })