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> <ItemGroup>
<ProjectReference Include="..\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj" /> <ProjectReference Include="..\Volo.Abp.BlobStoring\Volo.Abp.BlobStoring.csproj" />
<PackageReference Include="Minio" Version="4.0.3" /> <PackageReference Include="Minio" Version="4.0.6" />
</ItemGroup> </ItemGroup>
</Project> </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 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) public override async Task<bool> DeleteAsync(BlobProviderDeleteArgs args)
@ -46,13 +50,14 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
var client = GetMinioClient(args); var client = GetMinioClient(args);
var containerName = GetContainerName(args); var containerName = GetContainerName(args);
if (await BlobExistsAsync(client, containerName, blobName)) if (!await BlobExistsAsync(client, containerName, blobName))
{ {
await client.RemoveObjectAsync(containerName, blobName); return false;
return true;
} }
return false; await client.RemoveObjectAsync(new RemoveObjectArgs().WithBucket(containerName).WithObject(blobName));
return true;
} }
public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args) public override async Task<bool> ExistsAsync(BlobProviderExistsArgs args)
@ -76,7 +81,7 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
} }
var memoryStream = new MemoryStream(); var memoryStream = new MemoryStream();
await client.GetObjectAsync(containerName, blobName, (stream) => await client.GetObjectAsync(new GetObjectArgs().WithBucket(containerName).WithObject(blobName).WithCallbackStream(stream =>
{ {
if (stream != null) if (stream != null)
{ {
@ -87,7 +92,7 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
{ {
memoryStream = null; memoryStream = null;
} }
}); }));
return memoryStream; return memoryStream;
} }
@ -110,20 +115,20 @@ public class MinioBlobProvider : BlobProviderBase, ITransientDependency
protected virtual async Task CreateBucketIfNotExists(MinioClient client, string containerName) 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) protected virtual async Task<bool> BlobExistsAsync(MinioClient client, string containerName, string blobName)
{ {
// Make sure Blob Container exists. // Make sure Blob Container exists.
if (await client.BucketExistsAsync(containerName)) if (await client.BucketExistsAsync(new BucketExistsArgs().WithBucket(containerName)))
{ {
try try
{ {
await client.StatObjectAsync(containerName, blobName); await client.StatObjectAsync(new StatObjectArgs().WithBucket(containerName).WithObject(blobName));
} }
catch (Exception e) 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;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Minio; using Minio;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace Volo.Abp.BlobStoring.Minio; 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); AsyncHelper.RunSync(() => OnApplicationShutdownAsync(context));
if (await minioClient.BucketExistsAsync(_randomContainerName)) }
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) 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; 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.
public class MinioBlobContainer_Tests : BlobContainer_Tests<AbpBlobStoringMinioTestModule>
{
public MinioBlobContainer_Tests()
{
}
}
*/
Loading…
Cancel
Save