add switch for preferred aliyun oss uploads
This commit is contained in:
parent
67da32512a
commit
57b784f542
@ -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() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center justify-between rounded-lg border p-4">
|
||||
<div className="space-y-1">
|
||||
<Label className="text-sm font-medium">默认使用阿里云 OSS 入口桶</Label>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
关闭后新上传图片直接走当前默认存储,不再优先进入阿里云 OSS。
|
||||
</p>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
该开关只影响新图上传入口,不影响下方的转存时间、清理时间、单次批量任务设置。
|
||||
</p>
|
||||
</div>
|
||||
<Switch
|
||||
checked={siteSettings.ossImageMigrationConfig.preferAliyunForUploads}
|
||||
onCheckedChange={(checked) =>
|
||||
setSiteSettings((prev) => ({
|
||||
...prev,
|
||||
ossImageMigrationConfig: {
|
||||
...prev.ossImageMigrationConfig,
|
||||
preferAliyunForUploads: checked,
|
||||
},
|
||||
}))
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-4 md:grid-cols-2">
|
||||
<div className="space-y-2">
|
||||
<Label>OSS 源桶(可选指定)</Label>
|
||||
@ -7809,7 +7837,9 @@ export function AdminSettingsClient() {
|
||||
}))
|
||||
}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectTrigger
|
||||
disabled={!siteSettings.ossImageMigrationConfig.preferAliyunForUploads}
|
||||
>
|
||||
<SelectValue placeholder="自动选择阿里云 OSS(默认优先)" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
@ -7829,6 +7859,11 @@ export function AdminSettingsClient() {
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
{!siteSettings.ossImageMigrationConfig.preferAliyunForUploads ? (
|
||||
<p className="text-xs text-muted-foreground">
|
||||
已关闭默认走阿里云 OSS,当前源桶选择不会用于新上传图片。
|
||||
</p>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
|
||||
@ -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(),
|
||||
|
||||
@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -254,6 +254,10 @@ function normalizeStorageFailoverConfig(value: unknown): {
|
||||
async function resolvePreferredUploadStorageConfig(
|
||||
migrationConfig: OssImageMigrationConfig
|
||||
): Promise<StorageConfig | undefined> {
|
||||
if (!migrationConfig.enabled || !migrationConfig.preferAliyunForUploads) {
|
||||
return await getDefaultStorageConfig();
|
||||
}
|
||||
|
||||
const preferredAliyunConfig = await getPreferredAliyunStorageConfig({
|
||||
preferredId: migrationConfig.sourceStorageConfigId || undefined,
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user