Files

39 lines
1.3 KiB
TypeScript

// @ts-ignore
import DB from 'better-sqlite3';
import { defineEventHandler, readBody } from 'h3';
import crypto from 'crypto';
import fs from 'fs';
export default defineEventHandler(async (event) => {
try {
const data = await readFormData(event)
const file = data.get('file') as File
const expire = data.get('expire') as string
console.log({
file: file.name,
expire,
})
const fileBuffer = Buffer.from(await file.arrayBuffer());
// 计算文件的 MD5 哈希值
const hash = crypto.createHash('md5').update(fileBuffer).digest('hex');
const fileName = file.name;
const filePath = `./userData/imgBed/${hash}`;
// 将文件写入磁盘
await fs.promises.writeFile(filePath, fileBuffer);
// 获取文件大小
const fileSize = fileBuffer.length;
const db = new DB('./userData/db/imgBed.db');
// 插入数据到数据库
db.prepare(`
INSERT INTO imgBed (name, hash, size, expire)
VALUES (?,?,?,?)
`).run([fileName, hash, fileSize, expire]);
db.close();
return { code: 200, hash, fileName, fileSize, expire: Number(expire) + Date.now() };
} catch (error) {
console.error(error);
return { code: 500, msg: 'Internal Server Error' };
}
});