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 { Injectable, Logger } from '@nestjs/common'
|
||||||
import * as unzipper from 'unzipper'
|
import * as unzipper from 'unzipper'
|
||||||
import * as bplist from 'bplist-parser'
|
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'
|
import { Platform } from '@/domain/enums/platform.enum'
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
||||||
|
|
@ -33,8 +36,16 @@ export class PackageParserService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private async parseApk(buffer: Buffer): Promise<ParsedPackageInfo | null> {
|
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 {
|
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()
|
const manifest = await reader.readManifest()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
@ -47,6 +58,13 @@ export class PackageParserService {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(`Failed to parse APK: ${error.message}`)
|
this.logger.error(`Failed to parse APK: ${error.message}`)
|
||||||
throw error
|
throw error
|
||||||
|
} finally {
|
||||||
|
// Clean up temp file
|
||||||
|
try {
|
||||||
|
await fs.unlink(tempFile)
|
||||||
|
} catch {
|
||||||
|
// Ignore cleanup errors
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue