Browse Source

Enhance Blob storing Minio provider

pull/14741/head
liangshiwei 4 years ago
parent
commit
ff9b96d9ae
  1. 2
      framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj
  2. 27
      framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs
  3. 22
      framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs
  4. 12
      framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/MinioBlobContainer_Tests.cs

2
framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj

@ -15,7 +15,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj" />
<PackageReference Include="Minio" Version="4.0.3" />
<PackageReference Include="Minio" Version="4.0.6" />
</ItemGroup>
</Project>

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

@ -37,7 +37,11 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
await CreateBucketIfNotExists(client, containerName);
}
await client.PutObjectAsync(containerName, blobName, args.BlobStream, args.BlobStream.Length);
await client.PutObjectAsync(new PutObjectArgs()
.WithBucket(containerName)
.WithObject(blobName)
.WithStreamData(args.BlobStream)
.WithObjectSize(args.BlobStream.Length));
}
public override async Task<bool> DeleteAsync(BlobProviderDeleteArgs args)
@ -46,13 +50,14 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
var client = GetMinioClient(args);
var containerName = GetContainerName(args);
if (await BlobExistsAsync(client, containerName, blobName))
if (!await BlobExistsAsync(client, containerName, blobName))
{
await client.RemoveObjectAsync(containerName, blobName);
return true;
return false;
}
return false;
await client.RemoveObjectAsync(new RemoveObjectArgs().WithBucket(containerName).WithObject(blobName));
return true;
}
public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args)
@ -76,7 +81,7 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
}
var memoryStream = new MemoryStream();
await client.GetObjectAsync(containerName, blobName, (stream) =>
await client.GetObjectAsync(new GetObjectArgs().WithBucket(containerName).WithObject(blobName).WithCallbackStream(stream =>
{
if (stream != null)
{
@ -87,7 +92,7 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
{
memoryStream = null;
}
});
}));
return memoryStream;
}
@ -110,20 +115,20 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
protected virtual async Task CreateBucketIfNotExists(MinioClient client, string containerName)
{
if (!await client.BucketExistsAsync(containerName))
if (!await client.BucketExistsAsync(new BucketExistsArgs().WithBucket(containerName)))
{
await client.MakeBucketAsync(containerName);
await client.MakeBucketAsync(new MakeBucketArgs().WithBucket(containerName));
}
}
protected virtual async Task<bool> BlobExistsAsync(MinioClient client, string containerName, string blobName)
{
// Make sure Blob Container exists.
if (await client.BucketExistsAsync(containerName))
if (await client.BucketExistsAsync(new BucketExistsArgs().WithBucket(containerName)))
{
try
{
await client.StatObjectAsync(containerName, blobName);
await client.StatObjectAsync(new StatObjectArgs().WithBucket(containerName).WithObject(blobName));
}
catch (Exception e)
{

22
framework/test/Volo.Abp.BlobStoring.Minio.Tests/Volo/Abp/BlobStoring/Minio/AbpBlobStoringMinioTestModule.cs

@ -1,10 +1,12 @@
using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Minio;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace Volo.Abp.BlobStoring.Minio;
@ -59,20 +61,26 @@ public class AbpBlobStoringMinioTestModule : AbpModule
});
}
public override async void OnApplicationShutdown(ApplicationShutdownContext context)
public override void OnApplicationShutdown(ApplicationShutdownContext context)
{
var minioClient = new MinioClient(_endPoint, _accessKey, _secretKey);
if (await minioClient.BucketExistsAsync(_randomContainerName))
AsyncHelper.RunSync(() => OnApplicationShutdownAsync(context));
}
public async override Task OnApplicationShutdownAsync(ApplicationShutdownContext context)
{
var minioClient = new MinioClient().WithEndpoint(_endPoint).WithCredentials(_accessKey, _secretKey).Build();
if (await minioClient.BucketExistsAsync(new BucketExistsArgs().WithBucket(_randomContainerName)))
{
var objects = await minioClient.ListObjectsAsync(_randomContainerName, null, true).ToList();
var objects = await minioClient.ListObjectsAsync(new ListObjectsArgs().WithBucket(_randomContainerName)
.WithPrefix(null).WithRecursive(true)).ToList();
foreach (var item in objects)
{
await minioClient.RemoveObjectAsync(_randomContainerName, item.Key);
await minioClient.RemoveObjectAsync(new RemoveObjectArgs().WithBucket(_randomContainerName)
.WithObject(item.Key));
}
await minioClient.RemoveBucketAsync(_randomContainerName);
await minioClient.RemoveBucketAsync(new RemoveBucketArgs().WithBucket(_randomContainerName));
}
}
}

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

@ -1,3 +1,15 @@
using Xunit;
namespace Volo.Abp.BlobStoring.Minio;
/*
//Please set the correct connection string in secrets.json and continue the test.
public class MinioBlobContainer_Tests : BlobContainer_Tests<AbpBlobStoringMinioTestModule>
{
public MinioBlobContainer_Tests()
{
}
}
*/
Loading…
Cancel
Save