From 379de95961233a301bed7f3b0d685d698be0ca66 Mon Sep 17 00:00:00 2001 From: anghunk Date: Thu, 12 Feb 2026 15:26:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E6=B7=BB=E5=8A=A0=20S3=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=AD=98=E5=82=A8=E5=A4=87=E4=BB=BD=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 S3 配置管理页面,支持 AWS S3、Cloudflare R2、MinIO 等兼容存储 - 实现 S3 客户端工具类,使用 aws4fetch 进行签名和上传 - 添加手动触发备份功能,将评论、配置和统计数据打包为 JSON 上传至 S3 - 在管理后台数据管理页面集成 S3 配置表单和备份操作按钮 - 新增相关 API 端点用于获取/保存 S3 配置及触发备份 --- cwd-admin/src/api/admin.ts | 20 ++++ cwd-admin/src/locales/zh-CN.json | 16 +++ cwd-admin/src/views/DataView/index.vue | 130 ++++++++++++++++++++++- cwd-api/package.json | 1 + cwd-api/src/api/admin/s3Settings.ts | 38 +++++++ cwd-api/src/api/admin/triggerS3Backup.ts | 54 ++++++++++ cwd-api/src/index.ts | 6 ++ cwd-api/src/utils/s3.ts | 52 +++++++++ cwd-api/src/utils/s3Settings.ts | 49 +++++++++ 9 files changed, 365 insertions(+), 1 deletion(-) create mode 100644 cwd-api/src/api/admin/s3Settings.ts create mode 100644 cwd-api/src/api/admin/triggerS3Backup.ts create mode 100644 cwd-api/src/utils/s3.ts create mode 100644 cwd-api/src/utils/s3Settings.ts diff --git a/cwd-admin/src/api/admin.ts b/cwd-admin/src/api/admin.ts index ea5ccf1..5b6b5cd 100644 --- a/cwd-admin/src/api/admin.ts +++ b/cwd-admin/src/api/admin.ts @@ -388,3 +388,23 @@ export function setupTelegramWebhook(): Promise<{ message: string; webhookUrl: s export function sendTelegramTestMessage(): Promise<{ message: string }> { return post<{ message: string }>('/admin/settings/telegram/test', {}); } + +export type S3SettingsResponse = { + endpoint: string; + accessKeyId: string; + secretAccessKey: string; + bucket: string; + region: string; +}; + +export function fetchS3Settings(): Promise { + return get('/admin/settings/s3'); +} + +export function saveS3Settings(data: S3SettingsResponse): Promise<{ message: string }> { + return put<{ message: string }>('/admin/settings/s3', data); +} + +export function triggerS3Backup(): Promise<{ message: string; file: string }> { + return post<{ message: string; file: string }>('/admin/backup/s3', {}); +} diff --git a/cwd-admin/src/locales/zh-CN.json b/cwd-admin/src/locales/zh-CN.json index 3a871f7..e8ca2e3 100644 --- a/cwd-admin/src/locales/zh-CN.json +++ b/cwd-admin/src/locales/zh-CN.json @@ -115,6 +115,22 @@ "desc": "一键备份或恢复系统所有数据(评论 + 配置 + 统计)。", "export": "全量导出", "import": "全量恢复" + }, + "s3": { + "title": "S3 备份", + "desc": "配置 S3 兼容存储(AWS S3, Cloudflare R2, MinIO 等),并支持手动触发备份。", + "endpoint": "API 端点 (Endpoint)", + "endpointHint": "例如: https://[account_id].r2.cloudflarestorage.com", + "region": "区域 (Region)", + "regionHint": "例如: auto, us-east-1", + "bucket": "存储桶 (Bucket)", + "accessKey": "Access Key ID", + "secretKey": "Secret Access Key", + "save": "保存配置", + "saving": "保存中...", + "backup": "立即备份到 S3", + "backingUp": "正在备份...", + "success": "备份成功!文件: {file}" } }, "logs": { diff --git a/cwd-admin/src/views/DataView/index.vue b/cwd-admin/src/views/DataView/index.vue index f7dde70..8a0a858 100644 --- a/cwd-admin/src/views/DataView/index.vue +++ b/cwd-admin/src/views/DataView/index.vue @@ -109,6 +109,62 @@ + +
+

{{ t("data.sections.s3.title") }}

+

{{ t("data.sections.s3.desc") }}

+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+