From b39be9301d01ca9614794237bcbf0128a81d289f Mon Sep 17 00:00:00 2001 From: CrescentLeaf Date: Thu, 14 Aug 2025 12:01:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20FileManager.uploadFile,=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B4=E5=A4=9A=E5=85=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?,=20=E4=BF=AE=E6=AD=A3=E4=B8=80=E4=B8=AA=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E8=A2=AB=20lint=20=E7=9A=84=E9=94=99=E8=AF=AF=20=E5=85=B6?= =?UTF-8?q?=E4=B8=AD,=20=E4=BF=AE=E6=AD=A3=20lint=20=E6=98=AF=E6=8A=8A=20F?= =?UTF-8?q?ileBean=20=E4=BB=8E=20interface=20=E6=8D=A2=E6=88=90=E4=BA=86?= =?UTF-8?q?=20class=20=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/FileManager.ts | 57 +++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/src/data/FileManager.ts b/src/data/FileManager.ts index 97f7c55..18a47e0 100644 --- a/src/data/FileManager.ts +++ b/src/data/FileManager.ts @@ -7,16 +7,17 @@ import fs from 'node:fs/promises' import { fileTypeFromBuffer } from 'file-type' export default class FileManager { - static FileBean = interface { - count: number, - name: string, - hash: string, - mime: string, + static FileBean = class { + declare count: number + declare name: string + declare hash: string + declare mime: string + declare chatid: string } static File = class { declare bean: FileManager.FileBean - constructor(bean: UserBean) { + constructor(bean: FileManager.FileBean) { this.bean = bean } getMime(): string { @@ -36,6 +37,9 @@ export default class FileManager { this.bean.hash ) } + getChatId(): string { + return this.bean.chatid + } async readAsync(): Buffer { return await fs.readFile(this.getFilePath()) } @@ -50,16 +54,49 @@ export default class FileManager { /* 序号 */ count INTEGER PRIMARY KEY AUTOINCREMENT, /* 文件名称 */ name TEXT NOT NULL, /* 文件哈希 */ hash TEXT NOT NULL, - /* MIME 类型 */ mime TEXT NOT NULL + /* MIME 类型 */ mime TEXT NOT NULL, + /* 来源 Chat */ chatid TEXT NOT NULL, + /* 上传时间 */ upload_time INT8 NOT NULL, + /* 最后使用时间 */ last_used_time INT8 NOT NULL ); `) return db } - static uploadFile(fileName: string, data: Buffer) { + static async uploadFile(fileName: string, data: Buffer, chatId: string) { const hash = crypto.createHash('sha256').update(data).digest('hex') - mime = fileTypeFromBuffer(data) - + const mime = fileTypeFromBuffer(data) + await fs.writeFile( + path.join( + config.data_path, + "files", + hash.substring(0, 1), + hash.substring(2, 3), + hash.substring(3, 4), + hash + ), + data + ) + return new FileManager.File( + FileManager.findAllBeansByCondition( + 'count = ?', + FileManager.database.prepare(`INSERT INTO ${FileManager.table_name} ( + name, + hash, + mime, + chatid, + upload_time, + last_used_time + ) VALUES (?, ?, ?, ?, ?, ?);`).run( + fileName, + hash, + mime, + chatId, + Date.now(), + -1 + ).lastInsertRowid + )[0] + ) } private static findAllBeansByCondition(condition: string, ...args: unknown[]): FileManager.FileBean[] {