Browse Source

Code refactoring

pull/4688/head
nuck.tang 6 years ago
parent
commit
49ad1409eb
  1. 102
      framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs
  2. 17
      framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/MinioBlobContainer_Tests.cs

102
framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs

@ -21,28 +21,31 @@ namespace Volo.Abp.BlobStoring.Minio
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var configuration = args.Configuration.GetMinioConfiguration(); var configuration = args.Configuration.GetMinioConfiguration();
var client = GetMinioClient(args);
var containerName = GetContainerName(args);
if (!args.OverrideExisting && await BlobExistsAsync(args, blobName)) if (!args.OverrideExisting && await BlobExistsAsync(client, containerName, blobName))
{ {
throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{GetContainerName(args)}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{containerName}'! Set {nameof(args.OverrideExisting)} if it should be overwritten.");
} }
if (configuration.CreateBucketIfNotExists) if (configuration.CreateBucketIfNotExists)
{ {
await CreateBucketIfNotExists(args); await CreateBucketIfNotExists(client, containerName);
} }
await GetMinioClient(args).PutObjectAsync(GetContainerName(args), blobName, args.BlobStream, args.BlobStream.Length); await client.PutObjectAsync(containerName, blobName, args.BlobStream, args.BlobStream.Length);
} }
public override async Task<bool> DeleteAsync(BlobProviderDeleteArgs args) public override async Task<bool> DeleteAsync(BlobProviderDeleteArgs args)
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var client = GetMinioClient(args);
var containerName = GetContainerName(args);
if (await BlobExistsAsync(args, blobName)) if (await BlobExistsAsync(client, containerName, blobName))
{ {
var client = GetMinioClient(args); await client.RemoveObjectAsync(containerName, blobName);
await client.RemoveObjectAsync(GetContainerName(args), blobName);
return true; return true;
} }
@ -52,45 +55,37 @@ namespace Volo.Abp.BlobStoring.Minio
public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args) public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args)
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var client = GetMinioClient(args);
var containerName = GetContainerName(args);
return await BlobExistsAsync(args, blobName); return await BlobExistsAsync(client, containerName, blobName);
} }
public override async Task<Stream> GetOrNullAsync(BlobProviderGetArgs args) public override async Task<Stream> GetOrNullAsync(BlobProviderGetArgs args)
{ {
var blobName = MinioBlobNameCalculator.Calculate(args); var blobName = MinioBlobNameCalculator.Calculate(args);
var client = GetMinioClient(args);
if (!await BlobExistsAsync(args, blobName)) var containerName = GetContainerName(args);
if (!await BlobExistsAsync(client, containerName, blobName))
{ {
return null; return null;
} }
try
{ var memoryStream = new MemoryStream();
var client = GetMinioClient(args); await client.GetObjectAsync(containerName, blobName,
(stream) =>
var stat = await client.StatObjectAsync(GetContainerName(args), blobName); {
if (stream != null)
MemoryStream returnStream = new MemoryStream(); {
stream.CopyTo(memoryStream);
await client.GetObjectAsync(GetContainerName(args), blobName, }
(stream) => else
{ {
if (stream != null) memoryStream = null;
{ }
stream.CopyTo(returnStream); });
// returnStream = new MemoryStream(stream.GetAllBytes()); return memoryStream;
}
});
return returnStream;
}
catch (MinioException ex)
{
}
return null;
} }
@ -99,6 +94,7 @@ namespace Volo.Abp.BlobStoring.Minio
{ {
var configuration = args.Configuration.GetMinioConfiguration(); var configuration = args.Configuration.GetMinioConfiguration();
var client = new MinioClient(configuration.EndPoint, configuration.AccessKey, configuration.SecretKey); var client = new MinioClient(configuration.EndPoint, configuration.AccessKey, configuration.SecretKey);
if (configuration.WithSSL) if (configuration.WithSSL)
{ {
client.WithSSL(); client.WithSSL();
@ -110,10 +106,8 @@ namespace Volo.Abp.BlobStoring.Minio
protected virtual async Task CreateBucketIfNotExists(BlobProviderArgs args) protected virtual async Task CreateBucketIfNotExists(MinioClient client,string containerName)
{ {
var client = GetMinioClient(args);
var containerName = GetContainerName(args);
if (!await client.BucketExistsAsync(containerName)) if (!await client.BucketExistsAsync(containerName))
{ {
await client.MakeBucketAsync(containerName); await client.MakeBucketAsync(containerName);
@ -121,21 +115,31 @@ namespace Volo.Abp.BlobStoring.Minio
} }
private async Task<bool> BlobExistsAsync(BlobProviderArgs args, string blobName) private async Task<bool> BlobExistsAsync(MinioClient client, string containerName , string blobName)
{ {
// Make sure Blob Container exists. // Make sure Blob Container exists.
if (await ContainerExistsAsync(args)) if (await client.BucketExistsAsync(containerName))
{ {
try try
{ {
await GetMinioClient(args).StatObjectAsync(GetContainerName(args), blobName); // Check whether the object exists using statObject().
// If the object is not found, statObject() throws an exception,
// else it means that the object exists.
// Execution is successful.
await client.StatObjectAsync(containerName, blobName);
return true; return true;
} }
catch (MinioException ex) catch (MinioException ex)
{ {
if(ex is ObjectNotFoundException)
{
return false;
}
throw ex;
} }
} }
return false; return false;
} }
@ -143,17 +147,11 @@ namespace Volo.Abp.BlobStoring.Minio
{ {
var configuration = args.Configuration.GetMinioConfiguration(); var configuration = args.Configuration.GetMinioConfiguration();
//minio bucket name must be lower //Minio bucket name must be lowercase
return configuration.BucketName.IsNullOrWhiteSpace() return configuration.BucketName.IsNullOrWhiteSpace()
? args.ContainerName.ToLower() ? args.ContainerName.ToLower()
: configuration.BucketName.ToLower(); : configuration.BucketName.ToLower();
} }
private async Task<bool> ContainerExistsAsync(BlobProviderArgs args)
{
var client = GetMinioClient(args);
return await client.BucketExistsAsync(GetContainerName(args));
}
} }
} }

17
framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/MinioBlobContainer_Tests.cs

@ -1,16 +1,19 @@
using Xunit; using Shouldly;
using System.Threading.Tasks;
using Xunit;
namespace Volo.Abp.BlobStoring.Minio namespace Volo.Abp.BlobStoring.Minio
{ {
////Please set the correct connection string in secrets.json and continue the test. ////Please set the correct connection string in secrets.json and continue the test.
//public class MinioBlobContainer_Tests : BlobContainer_Tests<AbpBlobStoringMinioTestModule> public class MinioBlobContainer_Tests : BlobContainer_Tests<AbpBlobStoringMinioTestModule>
//{ {
// public MinioBlobContainer_Tests() public MinioBlobContainer_Tests()
// { {
// } }
//} }
} }

Loading…
Cancel
Save