From 114a9e611c7f87e637b04c0a798d2b5cab6a1da0 Mon Sep 17 00:00:00 2001 From: Developer Date: Wed, 3 Dec 2025 08:22:14 -0800 Subject: [PATCH] =?UTF-8?q?fix(admin-service):=20=E4=BF=AE=E5=A4=8D=20APK?= =?UTF-8?q?=20=E8=A7=A3=E6=9E=90=20-=20=E4=BD=BF=E7=94=A8=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E6=96=87=E4=BB=B6=E4=BB=A3=E6=9B=BF=20Buffer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit adbkit-apkreader 库只支持文件路径,不支持 Buffer 现在先将 Buffer 写入临时文件,解析后删除 参考: https://github.com/openstf/adbkit-apkreader 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../parsers/package-parser.service.ts | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts b/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts index d8f18252..df8ec521 100644 --- a/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts +++ b/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts @@ -1,6 +1,9 @@ import { Injectable, Logger } from '@nestjs/common' import * as unzipper from 'unzipper' import * as bplist from 'bplist-parser' +import * as fs from 'fs/promises' +import * as path from 'path' +import * as os from 'os' import { Platform } from '@/domain/enums/platform.enum' // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -33,8 +36,16 @@ export class PackageParserService { } private async parseApk(buffer: Buffer): Promise { + // adbkit-apkreader only supports file paths, not buffers + // So we need to write buffer to a temp file first + const tempFile = path.join(os.tmpdir(), `apk-parse-${Date.now()}.apk`) + try { - const reader = await ApkReader.open(buffer) + // Write buffer to temp file + await fs.writeFile(tempFile, buffer) + + // Open APK from file path + const reader = await ApkReader.open(tempFile) const manifest = await reader.readManifest() return { @@ -47,6 +58,13 @@ export class PackageParserService { } catch (error) { this.logger.error(`Failed to parse APK: ${error.message}`) throw error + } finally { + // Clean up temp file + try { + await fs.unlink(tempFile) + } catch { + // Ignore cleanup errors + } } }