fix(admin-service): 修复 APK 解析 - 使用临时文件代替 Buffer
adbkit-apkreader 库只支持文件路径,不支持 Buffer 现在先将 Buffer 写入临时文件,解析后删除 参考: https://github.com/openstf/adbkit-apkreader 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b1bee7f44e
commit
114a9e611c
|
|
@ -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<ParsedPackageInfo | null> {
|
||||
// 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue