Browse Source

Add IBlobNormalizeNamingFactory

pull/6897/head
liangshiwei 6 years ago
parent
commit
69a613d3f7
  1. 8
      framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs
  2. 8
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs
  3. 10
      framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs
  4. 10
      framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs
  5. 37
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs
  6. 7
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs
  7. 64
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs
  8. 27
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs
  9. 11
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs

8
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 IOssClientFactory OssClientFactory { get; }
protected IAliyunBlobNameCalculator AliyunBlobNameCalculator { get; } protected IAliyunBlobNameCalculator AliyunBlobNameCalculator { get; }
protected IServiceProvider ServiceProvider { get; } protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; }
public AliyunBlobProvider( public AliyunBlobProvider(
IOssClientFactory ossClientFactory, IOssClientFactory ossClientFactory,
IAliyunBlobNameCalculator aliyunBlobNameCalculator, IAliyunBlobNameCalculator aliyunBlobNameCalculator,
IServiceProvider serviceProvider) IBlobNormalizeNamingFactory blobNormalizeNamingFactory)
{ {
OssClientFactory = ossClientFactory; OssClientFactory = ossClientFactory;
AliyunBlobNameCalculator = aliyunBlobNameCalculator; AliyunBlobNameCalculator = aliyunBlobNameCalculator;
ServiceProvider = serviceProvider; BlobNormalizeNamingFactory = blobNormalizeNamingFactory;
} }
protected virtual IOss GetOssClient(BlobContainerConfiguration blobContainerConfiguration) protected virtual IOss GetOssClient(BlobContainerConfiguration blobContainerConfiguration)
@ -96,7 +96,7 @@ namespace Volo.Abp.BlobStoring.Aliyun
var configuration = args.Configuration.GetAliyunConfiguration(); var configuration = args.Configuration.GetAliyunConfiguration();
return configuration.ContainerName.IsNullOrWhiteSpace() return configuration.ContainerName.IsNullOrWhiteSpace()
? args.ContainerName ? args.ContainerName
: NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName);
} }
protected virtual bool BlobExists(IOss ossClient,string containerName, string blobName) protected virtual bool BlobExists(IOss ossClient,string containerName, string blobName)

8
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 IAwsBlobNameCalculator AwsBlobNameCalculator { get; }
protected IAmazonS3ClientFactory AmazonS3ClientFactory { get; } protected IAmazonS3ClientFactory AmazonS3ClientFactory { get; }
protected IServiceProvider ServiceProvider { get; } protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; }
public AwsBlobProvider( public AwsBlobProvider(
IAwsBlobNameCalculator awsBlobNameCalculator, IAwsBlobNameCalculator awsBlobNameCalculator,
IAmazonS3ClientFactory amazonS3ClientFactory, IAmazonS3ClientFactory amazonS3ClientFactory,
IServiceProvider serviceProvider) IBlobNormalizeNamingFactory blobNormalizeNamingFactory)
{ {
AwsBlobNameCalculator = awsBlobNameCalculator; AwsBlobNameCalculator = awsBlobNameCalculator;
AmazonS3ClientFactory = amazonS3ClientFactory; AmazonS3ClientFactory = amazonS3ClientFactory;
ServiceProvider = serviceProvider; BlobNormalizeNamingFactory = blobNormalizeNamingFactory;
} }
public async override Task SaveAsync(BlobProviderSaveArgs args) public async override Task SaveAsync(BlobProviderSaveArgs args)
@ -156,7 +156,7 @@ namespace Volo.Abp.BlobStoring.Aws
var configuration = args.Configuration.GetAwsConfiguration(); var configuration = args.Configuration.GetAwsConfiguration();
return configuration.ContainerName.IsNullOrWhiteSpace() return configuration.ContainerName.IsNullOrWhiteSpace()
? args.ContainerName ? args.ContainerName
: NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName);
} }
} }
} }

10
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 public class AzureBlobProvider : BlobProviderBase, ITransientDependency
{ {
protected IAzureBlobNameCalculator AzureBlobNameCalculator { get; } 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; AzureBlobNameCalculator = azureBlobNameCalculator;
ServiceProvider = serviceProvider; BlobNormalizeNamingFactory = blobNormalizeNamingFactory;
} }
public async override Task SaveAsync(BlobProviderSaveArgs args) public async override Task SaveAsync(BlobProviderSaveArgs args)
@ -101,7 +103,7 @@ namespace Volo.Abp.BlobStoring.Azure
var configuration = args.Configuration.GetAzureConfiguration(); var configuration = args.Configuration.GetAzureConfiguration();
return configuration.ContainerName.IsNullOrWhiteSpace() return configuration.ContainerName.IsNullOrWhiteSpace()
? args.ContainerName ? args.ContainerName
: NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName);
} }
protected virtual async Task<bool> ContainerExistsAsync(BlobContainerClient blobContainerClient) protected virtual async Task<bool> ContainerExistsAsync(BlobContainerClient blobContainerClient)

10
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 public class MinioBlobProvider : BlobProviderBase, ITransientDependency
{ {
protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } 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; MinioBlobNameCalculator = minioBlobNameCalculator;
ServiceProvider = serviceProvider; BlobNormalizeNamingFactory = blobNormalizeNamingFactory;
} }
public async override Task SaveAsync(BlobProviderSaveArgs args) public async override Task SaveAsync(BlobProviderSaveArgs args)
@ -141,7 +143,7 @@ namespace Volo.Abp.BlobStoring.Minio
return configuration.BucketName.IsNullOrWhiteSpace() return configuration.BucketName.IsNullOrWhiteSpace()
? args.ContainerName ? args.ContainerName
: NormalizeContainerName(args, ServiceProvider, configuration.BucketName); : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.BucketName);
} }
} }
} }

37
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs

@ -1,9 +1,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading; using Volo.Abp.Threading;
@ -88,12 +86,15 @@ namespace Volo.Abp.BlobStoring
protected IServiceProvider ServiceProvider { get; } protected IServiceProvider ServiceProvider { get; }
protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; }
public BlobContainer( public BlobContainer(
string containerName, string containerName,
BlobContainerConfiguration configuration, BlobContainerConfiguration configuration,
IBlobProvider provider, IBlobProvider provider,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
ICancellationTokenProvider cancellationTokenProvider, ICancellationTokenProvider cancellationTokenProvider,
IBlobNormalizeNamingFactory blobNormalizeNamingFactory,
IServiceProvider serviceProvider) IServiceProvider serviceProvider)
{ {
ContainerName = containerName; ContainerName = containerName;
@ -101,6 +102,7 @@ namespace Volo.Abp.BlobStoring
Provider = provider; Provider = provider;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
CancellationTokenProvider = cancellationTokenProvider; CancellationTokenProvider = cancellationTokenProvider;
BlobNormalizeNamingFactory = blobNormalizeNamingFactory;
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
} }
@ -112,7 +114,7 @@ namespace Volo.Abp.BlobStoring
{ {
using (CurrentTenant.Change(GetTenantIdOrNull())) using (CurrentTenant.Change(GetTenantIdOrNull()))
{ {
var (normalizedContainerName, normalizedBlobName) = NormalizeNaming(ContainerName, name); var (normalizedContainerName, normalizedBlobName) = BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name);
await Provider.SaveAsync( await Provider.SaveAsync(
new BlobProviderSaveArgs( new BlobProviderSaveArgs(
@ -134,7 +136,7 @@ namespace Volo.Abp.BlobStoring
using (CurrentTenant.Change(GetTenantIdOrNull())) using (CurrentTenant.Change(GetTenantIdOrNull()))
{ {
var (normalizedContainerName, normalizedBlobName) = var (normalizedContainerName, normalizedBlobName) =
NormalizeNaming(ContainerName, name); BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name);
return await Provider.DeleteAsync( return await Provider.DeleteAsync(
new BlobProviderDeleteArgs( new BlobProviderDeleteArgs(
@ -154,7 +156,7 @@ namespace Volo.Abp.BlobStoring
using (CurrentTenant.Change(GetTenantIdOrNull())) using (CurrentTenant.Change(GetTenantIdOrNull()))
{ {
var (normalizedContainerName, normalizedBlobName) = var (normalizedContainerName, normalizedBlobName) =
NormalizeNaming(ContainerName, name); BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name);
return await Provider.ExistsAsync( return await Provider.ExistsAsync(
new BlobProviderExistsArgs( new BlobProviderExistsArgs(
@ -190,7 +192,7 @@ namespace Volo.Abp.BlobStoring
using (CurrentTenant.Change(GetTenantIdOrNull())) using (CurrentTenant.Change(GetTenantIdOrNull()))
{ {
var (normalizedContainerName, normalizedBlobName) = var (normalizedContainerName, normalizedBlobName) =
NormalizeNaming(ContainerName, name); BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name);
return await Provider.GetOrNullAsync( return await Provider.GetOrNullAsync(
new BlobProviderGetArgs( new BlobProviderGetArgs(
@ -212,28 +214,5 @@ namespace Volo.Abp.BlobStoring
return CurrentTenant.Id; 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<IBlobNamingNormalizer>();
containerName = normalizer.NormalizeContainerName(containerName);
blobName = normalizer.NormalizeBlobName(blobName);
}
return (containerName, blobName);
}
}
} }
} }

7
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs

@ -17,18 +17,22 @@ namespace Volo.Abp.BlobStoring
protected IServiceProvider ServiceProvider { get; } protected IServiceProvider ServiceProvider { get; }
protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; }
public BlobContainerFactory( public BlobContainerFactory(
IBlobContainerConfigurationProvider configurationProvider, IBlobContainerConfigurationProvider configurationProvider,
ICurrentTenant currentTenant, ICurrentTenant currentTenant,
ICancellationTokenProvider cancellationTokenProvider, ICancellationTokenProvider cancellationTokenProvider,
IBlobProviderSelector providerSelector, IBlobProviderSelector providerSelector,
IServiceProvider serviceProvider) IServiceProvider serviceProvider,
IBlobNormalizeNamingFactory blobNormalizeNamingFactory)
{ {
ConfigurationProvider = configurationProvider; ConfigurationProvider = configurationProvider;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
CancellationTokenProvider = cancellationTokenProvider; CancellationTokenProvider = cancellationTokenProvider;
ProviderSelector = providerSelector; ProviderSelector = providerSelector;
ServiceProvider = serviceProvider; ServiceProvider = serviceProvider;
BlobNormalizeNamingFactory = blobNormalizeNamingFactory;
} }
public virtual IBlobContainer Create(string name) public virtual IBlobContainer Create(string name)
@ -41,6 +45,7 @@ namespace Volo.Abp.BlobStoring
ProviderSelector.Get(name), ProviderSelector.Get(name),
CurrentTenant, CurrentTenant,
CancellationTokenProvider, CancellationTokenProvider,
BlobNormalizeNamingFactory,
ServiceProvider ServiceProvider
); );
} }

64
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<IBlobNamingNormalizer>();
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;
}
}
}

27
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs

@ -1,8 +1,5 @@
using System; using System.IO;
using System.IO;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
namespace Volo.Abp.BlobStoring namespace Volo.Abp.BlobStoring
{ {
@ -15,27 +12,5 @@ namespace Volo.Abp.BlobStoring
public abstract Task<bool> ExistsAsync(BlobProviderExistsArgs args); public abstract Task<bool> ExistsAsync(BlobProviderExistsArgs args);
public abstract Task<Stream> GetOrNullAsync(BlobProviderGetArgs args); public abstract Task<Stream> 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<IBlobNamingNormalizer>();
containerName = normalizer.NormalizeContainerName(containerName);
}
return containerName;
}
}
} }
} }

11
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);
}
}
Loading…
Cancel
Save