From decdfde0a563437edacc531616f8bc79eac45526 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Wed, 10 Jun 2020 13:08:10 +0800 Subject: [PATCH] Use ContainerName of the BlobProviderArgs if ContainerName of the AzureBlobProviderConfiguration is not specified. --- .../BlobStoring/Azure/AzureBlobProvider.cs | 52 +++++++++++-------- .../Azure/AzureBlobProviderConfiguration.cs | 1 + 2 files changed, 30 insertions(+), 23 deletions(-) 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 af5150c0a9..1afc3b6a53 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 @@ -1,7 +1,7 @@ -using System.IO; +using System; +using System.IO; using System.Threading.Tasks; using Azure.Storage.Blobs; -using Azure.Storage.Blobs.Specialized; using Volo.Abp.DependencyInjection; namespace Volo.Abp.BlobStoring.Azure @@ -20,27 +20,26 @@ namespace Volo.Abp.BlobStoring.Azure var blobName = AzureBlobNameCalculator.Calculate(args); var configuration = args.Configuration.GetAzureConfiguration(); - if (!args.OverrideExisting && await BlobExistsAsync(configuration, blobName)) + if (!args.OverrideExisting && await BlobExistsAsync(args, blobName)) { - throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{configuration.ContainerName}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); + throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{GetContainerName(args)}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); } if (configuration.CreateContainerIfNotExists) { - await CreateContainerIfNotExists(configuration); + await CreateContainerIfNotExists(args); } - await GetBlobClient(configuration, blobName).UploadAsync(args.BlobStream, true); + await GetBlobClient(args, blobName).UploadAsync(args.BlobStream, true); } public override async Task DeleteAsync(BlobProviderDeleteArgs args) { var blobName = AzureBlobNameCalculator.Calculate(args); - var configuration = args.Configuration.GetAzureConfiguration(); - if (await BlobExistsAsync(configuration, blobName)) + if (await BlobExistsAsync(args, blobName)) { - return await GetBlobClient(configuration, blobName).DeleteIfExistsAsync(); + return await GetBlobClient(args, blobName).DeleteIfExistsAsync(); } return false; @@ -49,51 +48,58 @@ namespace Volo.Abp.BlobStoring.Azure public override async Task ExistsAsync(BlobProviderExistsArgs args) { var blobName = AzureBlobNameCalculator.Calculate(args); - var configuration = args.Configuration.GetAzureConfiguration(); - return await BlobExistsAsync(configuration, blobName); + return await BlobExistsAsync(args, blobName); } public override async Task GetOrNullAsync(BlobProviderGetArgs args) { var blobName = AzureBlobNameCalculator.Calculate(args); - var configuration = args.Configuration.GetAzureConfiguration(); - if (!await BlobExistsAsync(configuration, blobName)) + if (!await BlobExistsAsync(args, blobName)) { return null; } - var blobClient = GetBlobClient(configuration, blobName); + var blobClient = GetBlobClient(args, blobName); var download = await blobClient.DownloadAsync(); var memoryStream = new MemoryStream(); await download.Value.Content.CopyToAsync(memoryStream); return memoryStream; } - protected virtual BlobClient GetBlobClient(AzureBlobProviderConfiguration configuration, string blobName) + protected virtual BlobClient GetBlobClient(BlobProviderArgs args, string blobName) { - var blobContainerClient = GetBlobContainerClient(configuration); + var blobContainerClient = GetBlobContainerClient(args); return blobContainerClient.GetBlobClient(blobName); } - protected virtual BlobContainerClient GetBlobContainerClient(AzureBlobProviderConfiguration configuration) + protected virtual BlobContainerClient GetBlobContainerClient(BlobProviderArgs args) { + var configuration = args.Configuration.GetAzureConfiguration(); var blobServiceClient = new BlobServiceClient(configuration.ConnectionString); - return blobServiceClient.GetBlobContainerClient(configuration.ContainerName); + return blobServiceClient.GetBlobContainerClient(GetContainerName(args)); } - protected virtual async Task CreateContainerIfNotExists(AzureBlobProviderConfiguration configuration) + protected virtual async Task CreateContainerIfNotExists(BlobProviderArgs args) { - var blobContainerClient = GetBlobContainerClient(configuration); + var blobContainerClient = GetBlobContainerClient(args); await blobContainerClient.CreateIfNotExistsAsync(); } - private async Task BlobExistsAsync(AzureBlobProviderConfiguration configuration, string blobName) + private async Task BlobExistsAsync(BlobProviderArgs args, string blobName) { // Make sure Blob Container exists. - return await ContainerExistsAsync(GetBlobContainerClient(configuration)) && - (await GetBlobClient(configuration, blobName).ExistsAsync()).Value; + return await ContainerExistsAsync(GetBlobContainerClient(args)) && + (await GetBlobClient(args, blobName).ExistsAsync()).Value; + } + + private static string GetContainerName(BlobProviderArgs args) + { + var configuration = args.Configuration.GetAzureConfiguration(); + return configuration.ContainerName.IsNullOrWhiteSpace() + ? args.ContainerName + : configuration.ContainerName; } private static async Task ContainerExistsAsync(BlobContainerClient blobContainerClient) diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs index 8c232b7729..7ab338794b 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs @@ -12,6 +12,7 @@ /// This name may only contain lowercase letters, numbers, and hyphens, and must begin with a letter or a number. /// Each hyphen must be preceded and followed by a non-hyphen character. /// The name must also be between 3 and 63 characters long. + /// If this parameter is not specified, the ContainerName of the will be used. /// public string ContainerName {