新增KV数据库存储附件

This commit is contained in:
eoao
2025-10-21 20:45:20 +08:00
parent dad4a22356
commit fdf9e95d67
18 changed files with 213 additions and 73 deletions

View File

@@ -0,0 +1,36 @@
const kvObjService = {
async putObj(c, key, content, metadata) {
await c.env.kv.put(key, content, { metadata: metadata });
},
async deleteObj(c, keys) {
if (typeof keys === 'string') {
keys = [keys];
}
if (keys.length === 0) {
return;
}
await Promise.all(keys.map( key => c.env.kv.delete(key)));
},
async toObjResp(c, key) {
const obj = await c.env.kv.getWithMetadata(key, { type: "arrayBuffer"});
return new Response(obj.value, {
headers: {
'Content-Type': obj.metadata?.contentType || 'application/octet-stream',
'Content-Disposition': obj.metadata?.contentDisposition || null,
'Cache-Control': obj.metadata?.cacheControl || null
}
});
}
};
export default kvObjService;

View File

@@ -1,23 +1,35 @@
import s3Service from './s3-service';
import settingService from './setting-service';
import kvObjService from './kv-obj-service';
import { settingConst } from '../const/entity-const';
const r2Service = {
async hasOSS(c) {
if (c.env.r2) {
const setting = await settingService.query(c);
const { kvStorage, bucket, endpoint, s3AccessKey, s3SecretKey } = setting;
if (kvStorage === settingConst.kvStorage.OPEN) {
return true;
}
const setting = await settingService.query(c);
const { bucket, endpoint, s3AccessKey, s3SecretKey } = setting;
if (c.env.r2) {
return true;
}
return !!(bucket && endpoint && s3AccessKey && s3SecretKey);
},
async putObj(c, key, content, metadata) {
if (c.env.r2) {
const { kvStorage } = await settingService.query(c);
if (kvStorage === settingConst.kvStorage.OPEN) {
await kvObjService.putObj(c, key, content, metadata);
} else if (c.env.r2) {
await c.env.r2.put(key, content, {
httpMetadata: { ...metadata }
@@ -37,7 +49,13 @@ const r2Service = {
async delete(c, key) {
if (c.env.r2) {
const { kvStorage } = await settingService.query(c);
if (kvStorage === settingConst.kvStorage.OPEN) {
await kvObjService.deleteObj(c, key);
} else if (c.env.r2) {
await c.env.r2.delete(key);

View File

@@ -1,12 +1,9 @@
import KvConst from '../const/kv-const';
import setting from '../entity/setting';
import orm from '../entity/orm';
import { settingConst, verifyRecordType } from '../const/entity-const';
import { verifyRecordType } from '../const/entity-const';
import fileUtils from '../utils/file-utils';
import r2Service from './r2-service';
import emailService from './email-service';
import accountService from './account-service';
import userService from './user-service';
import constant from '../const/constant';
import BizError from '../error/biz-error';
import { t } from '../i18n/i18n'
@@ -100,12 +97,38 @@ const settingService = {
await this.refresh(c);
},
async deleteBackground(c) {
const { background } = await this.query(c);
if (!background) return
if (background.startsWith('http')) {
await orm(c).update(setting).set({ background: '' }).run();
await this.refresh(c)
return;
}
const hasOss = await r2Service.hasOSS(c);
if (hasOss) {
if (background) {
await r2Service.delete(c,background)
await orm(c).update(setting).set({ background: '' }).run();
await this.refresh(c)
}
}
},
async setBackground(c, params) {
const settingRow = await this.query(c);
let { background } = params
await this.deleteBackground(c);
if (background && !background.startsWith('http')) {
if (!await r2Service.hasOSS(c)) {
@@ -130,14 +153,6 @@ const settingService = {
}
if (settingRow.background) {
try {
await r2Service.delete(c, settingRow.background);
} catch (e) {
console.error(e)
}
}
await orm(c).update(setting).set({ background }).run();
await this.refresh(c);
return background;