From 57b784f5423be7cdc614c5b940825d39557b4c24 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 17 Mar 2026 23:01:17 +0800 Subject: [PATCH] add switch for preferred aliyun oss uploads --- .../settings/admin-settings-client.tsx | 37 ++++++++++++++++++- app/api/site-settings/route.ts | 1 + lib/storage/migration-config.ts | 4 +- lib/storage/service.ts | 4 ++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index 68730937f..d57856f34 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -293,6 +293,7 @@ type StorageFailoverConfig = { type OssImageMigrationConfig = { enabled: boolean; + preferAliyunForUploads: boolean; sourceStorageConfigId: string; targetStorageConfigId: string; migrateAfterHours: number; @@ -321,6 +322,7 @@ const defaultStorageFailoverConfig: StorageFailoverConfig = { const defaultOssImageMigrationConfig: OssImageMigrationConfig = { enabled: true, + preferAliyunForUploads: true, sourceStorageConfigId: "", targetStorageConfigId: "", migrateAfterHours: 48, @@ -789,6 +791,8 @@ export function AdminSettingsClient() { }, ossImageMigrationConfig: { enabled: (siteSettingsData as any).ossImageMigrationConfig?.enabled !== false, + preferAliyunForUploads: + (siteSettingsData as any).ossImageMigrationConfig?.preferAliyunForUploads !== false, sourceStorageConfigId: String( (siteSettingsData as any).ossImageMigrationConfig?.sourceStorageConfigId || "" ).trim(), @@ -7794,6 +7798,30 @@ export function AdminSettingsClient() { /> +
+
+ +

+ 关闭后新上传图片直接走当前默认存储,不再优先进入阿里云 OSS。 +

+

+ 该开关只影响新图上传入口,不影响下方的转存时间、清理时间、单次批量任务设置。 +

+
+ + setSiteSettings((prev) => ({ + ...prev, + ossImageMigrationConfig: { + ...prev.ossImageMigrationConfig, + preferAliyunForUploads: checked, + }, + })) + } + /> +
+
@@ -7809,7 +7837,9 @@ export function AdminSettingsClient() { })) } > - + @@ -7829,6 +7859,11 @@ export function AdminSettingsClient() { ))} + {!siteSettings.ossImageMigrationConfig.preferAliyunForUploads ? ( +

+ 已关闭默认走阿里云 OSS,当前源桶选择不会用于新上传图片。 +

+ ) : null}
diff --git a/app/api/site-settings/route.ts b/app/api/site-settings/route.ts index 9827942e2..639e87c5a 100644 --- a/app/api/site-settings/route.ts +++ b/app/api/site-settings/route.ts @@ -659,6 +659,7 @@ const updateSchema = z.object({ ossImageMigrationConfig: z .object({ enabled: z.boolean().optional(), + preferAliyunForUploads: z.boolean().optional(), sourceStorageConfigId: z.string().max(128).optional(), targetStorageConfigId: z.string().max(128).optional(), migrateAfterHours: z.number().min(1).max(720).optional(), diff --git a/lib/storage/migration-config.ts b/lib/storage/migration-config.ts index 2aa5da807..caee3398b 100644 --- a/lib/storage/migration-config.ts +++ b/lib/storage/migration-config.ts @@ -2,6 +2,7 @@ export const OSS_MIGRATION_CONFIG_KEY = "oss_image_migration_config"; export type OssImageMigrationConfig = { enabled: boolean; + preferAliyunForUploads: boolean; sourceStorageConfigId: string; targetStorageConfigId: string; migrateAfterHours: number; @@ -11,6 +12,7 @@ export type OssImageMigrationConfig = { export const defaultOssImageMigrationConfig: OssImageMigrationConfig = { enabled: true, + preferAliyunForUploads: true, sourceStorageConfigId: "", targetStorageConfigId: "", migrateAfterHours: 48, @@ -51,6 +53,7 @@ export function normalizeOssImageMigrationConfig( return { enabled: raw.enabled !== false, + preferAliyunForUploads: raw.preferAliyunForUploads !== false, sourceStorageConfigId: String(raw.sourceStorageConfigId || "").trim(), targetStorageConfigId: String(raw.targetStorageConfigId || "").trim(), migrateAfterHours: normalizedMigrateAfterHours, @@ -58,4 +61,3 @@ export function normalizeOssImageMigrationConfig( batchSize: normalizedBatchSize, }; } - diff --git a/lib/storage/service.ts b/lib/storage/service.ts index 51cbd5cfe..fb1a58cfe 100644 --- a/lib/storage/service.ts +++ b/lib/storage/service.ts @@ -254,6 +254,10 @@ function normalizeStorageFailoverConfig(value: unknown): { async function resolvePreferredUploadStorageConfig( migrationConfig: OssImageMigrationConfig ): Promise { + if (!migrationConfig.enabled || !migrationConfig.preferAliyunForUploads) { + return await getDefaultStorageConfig(); + } + const preferredAliyunConfig = await getPreferredAliyunStorageConfig({ preferredId: migrationConfig.sourceStorageConfigId || undefined, });