using Microsoft.Extensions.Options; using TakeoutSaaS.Module.Storage.Options; namespace TakeoutSaaS.Module.Storage.Providers; /// /// 七牛云 Kodo(S3 兼容网关)存储提供商。 /// public sealed class QiniuKodoStorageProvider(IOptionsMonitor optionsMonitor) : S3StorageProviderBase { private StorageOptions CurrentOptions => optionsMonitor.CurrentValue; /// public override StorageProviderKind Kind => StorageProviderKind.QiniuKodo; /// protected override string Bucket => CurrentOptions.QiniuKodo.Bucket; /// protected override string ServiceUrl => string.IsNullOrWhiteSpace(CurrentOptions.QiniuKodo.Endpoint) ? $"{(CurrentOptions.QiniuKodo.UseHttps ? "https" : "http")}://s3.qiniucs.com" : CurrentOptions.QiniuKodo.Endpoint!; /// protected override string AccessKey => CurrentOptions.QiniuKodo.AccessKey; /// protected override string SecretKey => CurrentOptions.QiniuKodo.SecretKey; /// protected override bool UseHttps => CurrentOptions.QiniuKodo.UseHttps; /// protected override bool ForcePathStyle => true; /// protected override string? CdnBaseUrl => !string.IsNullOrWhiteSpace(CurrentOptions.QiniuKodo.DownloadDomain) ? CurrentOptions.QiniuKodo.DownloadDomain : CurrentOptions.CdnBaseUrl; /// protected override TimeSpan SignedUrlExpiry { get { var minutes = CurrentOptions.QiniuKodo.SignedUrlExpirationMinutes ?? CurrentOptions.Security.DefaultUrlExpirationMinutes; return TimeSpan.FromMinutes(Math.Max(1, minutes)); } } }