diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index 199c343659..52d8674c67 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -10,16 +10,16 @@ namespace Volo.Abp.BlobStoring.Aliyun { protected IOssClientFactory OssClientFactory { get; } protected IAliyunBlobNameCalculator AliyunBlobNameCalculator { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } public AliyunBlobProvider( IOssClientFactory ossClientFactory, IAliyunBlobNameCalculator aliyunBlobNameCalculator, - IServiceProvider serviceProvider) + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { OssClientFactory = ossClientFactory; AliyunBlobNameCalculator = aliyunBlobNameCalculator; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } protected virtual IOss GetOssClient(BlobContainerConfiguration blobContainerConfiguration) @@ -96,7 +96,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var configuration = args.Configuration.GetAliyunConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); } protected virtual bool BlobExists(IOss ossClient,string containerName, string blobName) diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs index dbf2ce3848..991be2b37c 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs @@ -12,16 +12,16 @@ namespace Volo.Abp.BlobStoring.Aws { protected IAwsBlobNameCalculator AwsBlobNameCalculator { get; } protected IAmazonS3ClientFactory AmazonS3ClientFactory { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } public AwsBlobProvider( IAwsBlobNameCalculator awsBlobNameCalculator, IAmazonS3ClientFactory amazonS3ClientFactory, - IServiceProvider serviceProvider) + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { AwsBlobNameCalculator = awsBlobNameCalculator; AmazonS3ClientFactory = amazonS3ClientFactory; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -156,7 +156,7 @@ namespace Volo.Abp.BlobStoring.Aws var configuration = args.Configuration.GetAwsConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs index 58780c17b6..8e401b73c7 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs @@ -9,12 +9,14 @@ namespace Volo.Abp.BlobStoring.Azure public class AzureBlobProvider : BlobProviderBase, ITransientDependency { protected IAzureBlobNameCalculator AzureBlobNameCalculator { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } - public AzureBlobProvider(IAzureBlobNameCalculator azureBlobNameCalculator, IServiceProvider serviceProvider) + public AzureBlobProvider( + IAzureBlobNameCalculator azureBlobNameCalculator, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { AzureBlobNameCalculator = azureBlobNameCalculator; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -101,7 +103,7 @@ namespace Volo.Abp.BlobStoring.Azure var configuration = args.Configuration.GetAzureConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); } protected virtual async Task ContainerExistsAsync(BlobContainerClient blobContainerClient) diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs index f8f1a1e880..a182478017 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs @@ -10,12 +10,14 @@ namespace Volo.Abp.BlobStoring.Minio public class MinioBlobProvider : BlobProviderBase, ITransientDependency { protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } - public MinioBlobProvider(IMinioBlobNameCalculator minioBlobNameCalculator, IServiceProvider serviceProvider) + public MinioBlobProvider( + IMinioBlobNameCalculator minioBlobNameCalculator, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { MinioBlobNameCalculator = minioBlobNameCalculator; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -141,7 +143,7 @@ namespace Volo.Abp.BlobStoring.Minio return configuration.BucketName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.BucketName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.BucketName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs index cd2287e964..a95cdcadbe 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs @@ -1,9 +1,7 @@ using System; using System.IO; -using System.Linq; using System.Threading; using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; @@ -88,12 +86,15 @@ namespace Volo.Abp.BlobStoring protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + public BlobContainer( string containerName, BlobContainerConfiguration configuration, IBlobProvider provider, ICurrentTenant currentTenant, ICancellationTokenProvider cancellationTokenProvider, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory, IServiceProvider serviceProvider) { ContainerName = containerName; @@ -101,6 +102,7 @@ namespace Volo.Abp.BlobStoring Provider = provider; CurrentTenant = currentTenant; CancellationTokenProvider = cancellationTokenProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; ServiceProvider = serviceProvider; } @@ -112,7 +114,7 @@ namespace Volo.Abp.BlobStoring { using (CurrentTenant.Change(GetTenantIdOrNull())) { - var (normalizedContainerName, normalizedBlobName) = NormalizeNaming(ContainerName, name); + var (normalizedContainerName, normalizedBlobName) = BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); await Provider.SaveAsync( new BlobProviderSaveArgs( @@ -134,7 +136,7 @@ namespace Volo.Abp.BlobStoring using (CurrentTenant.Change(GetTenantIdOrNull())) { var (normalizedContainerName, normalizedBlobName) = - NormalizeNaming(ContainerName, name); + BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); return await Provider.DeleteAsync( new BlobProviderDeleteArgs( @@ -154,7 +156,7 @@ namespace Volo.Abp.BlobStoring using (CurrentTenant.Change(GetTenantIdOrNull())) { var (normalizedContainerName, normalizedBlobName) = - NormalizeNaming(ContainerName, name); + BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); return await Provider.ExistsAsync( new BlobProviderExistsArgs( @@ -190,7 +192,7 @@ namespace Volo.Abp.BlobStoring using (CurrentTenant.Change(GetTenantIdOrNull())) { var (normalizedContainerName, normalizedBlobName) = - NormalizeNaming(ContainerName, name); + BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); return await Provider.GetOrNullAsync( new BlobProviderGetArgs( @@ -212,28 +214,5 @@ namespace Volo.Abp.BlobStoring return CurrentTenant.Id; } - - protected virtual (string, string) NormalizeNaming(string containerName, string blobName) - { - if (!Configuration.NamingNormalizers.Any()) - { - return (containerName, blobName); - } - - using (var scope = ServiceProvider.CreateScope()) - { - foreach (var normalizerType in Configuration.NamingNormalizers) - { - var normalizer = scope.ServiceProvider - .GetRequiredService(normalizerType) - .As(); - - containerName = normalizer.NormalizeContainerName(containerName); - blobName = normalizer.NormalizeBlobName(blobName); - } - - return (containerName, blobName); - } - } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs index 7a4da39ef9..8013762164 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs @@ -17,18 +17,22 @@ namespace Volo.Abp.BlobStoring protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + public BlobContainerFactory( IBlobContainerConfigurationProvider configurationProvider, ICurrentTenant currentTenant, ICancellationTokenProvider cancellationTokenProvider, IBlobProviderSelector providerSelector, - IServiceProvider serviceProvider) + IServiceProvider serviceProvider, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { ConfigurationProvider = configurationProvider; CurrentTenant = currentTenant; CancellationTokenProvider = cancellationTokenProvider; ProviderSelector = providerSelector; ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public virtual IBlobContainer Create(string name) @@ -41,6 +45,7 @@ namespace Volo.Abp.BlobStoring ProviderSelector.Get(name), CurrentTenant, CancellationTokenProvider, + BlobNormalizeNamingFactory, ServiceProvider ); } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs new file mode 100644 index 0000000000..cafba9bec2 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs @@ -0,0 +1,64 @@ +using System; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.BlobStoring +{ + public class BlobNormalizeNamingFactory : IBlobNormalizeNamingFactory, ITransientDependency + { + protected IServiceProvider ServiceProvider { get; } + + public BlobNormalizeNamingFactory(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + + public (string containerName, string blobName) NormalizeNaming( + BlobContainerConfiguration configuration, + string containerName, + string blobName) + { + + if (!configuration.NamingNormalizers.Any()) + { + return (containerName, blobName); + } + + using (var scope = ServiceProvider.CreateScope()) + { + foreach (var normalizerType in configuration.NamingNormalizers) + { + var normalizer = scope.ServiceProvider + .GetRequiredService(normalizerType) + .As(); + + containerName = containerName.IsNullOrWhiteSpace()? containerName: normalizer.NormalizeContainerName(containerName); + blobName = blobName.IsNullOrWhiteSpace()? blobName: normalizer.NormalizeBlobName(blobName); + } + + return (containerName, blobName); + } + } + + public string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName) + { + if (!configuration.NamingNormalizers.Any()) + { + return containerName; + } + + return NormalizeNaming(configuration, containerName, null).containerName; + } + + public string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName) + { + if (!configuration.NamingNormalizers.Any()) + { + return blobName; + } + + return NormalizeNaming(configuration, null, blobName).blobName; + } + } +} diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs index d96b6fa94b..ea2bd1ed72 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs @@ -1,8 +1,5 @@ -using System; -using System.IO; -using System.Linq; +using System.IO; using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; namespace Volo.Abp.BlobStoring { @@ -15,27 +12,5 @@ namespace Volo.Abp.BlobStoring public abstract Task ExistsAsync(BlobProviderExistsArgs args); public abstract Task GetOrNullAsync(BlobProviderGetArgs args); - - protected virtual string NormalizeContainerName(BlobProviderArgs args, IServiceProvider serviceProvider, string containerName) - { - if (!args.Configuration.NamingNormalizers.Any()) - { - return containerName; - } - - using (var scope = serviceProvider.CreateScope()) - { - foreach (var normalizerType in args.Configuration.NamingNormalizers) - { - var normalizer = scope.ServiceProvider - .GetRequiredService(normalizerType) - .As(); - - containerName = normalizer.NormalizeContainerName(containerName); - } - - return containerName; - } - } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs new file mode 100644 index 0000000000..281196051d --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs @@ -0,0 +1,11 @@ +namespace Volo.Abp.BlobStoring +{ + public interface IBlobNormalizeNamingFactory + { + (string containerName, string blobName) NormalizeNaming(BlobContainerConfiguration configuration, string containerName, string blobName); + + string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName); + + string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName); + } +}