|
|
|
@ -11,6 +11,7 @@ using System.Collections.Generic; |
|
|
|
using System.IO; |
|
|
|
using System.Linq; |
|
|
|
using System.Linq.Dynamic.Core; |
|
|
|
using System.Net.Http; |
|
|
|
using System.Reactive.Linq; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Volo.Abp; |
|
|
|
@ -29,6 +30,7 @@ public class MinioOssContainer : OssContainerBase, IOssObjectExpireor |
|
|
|
protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } |
|
|
|
protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } |
|
|
|
protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } |
|
|
|
protected IHttpClientFactory HttpClientFactory { get; } |
|
|
|
|
|
|
|
protected IClock Clock { get; } |
|
|
|
protected ICurrentTenant CurrentTenant { get; } |
|
|
|
@ -42,12 +44,14 @@ public class MinioOssContainer : OssContainerBase, IOssObjectExpireor |
|
|
|
IBlobNormalizeNamingService blobNormalizeNamingService, |
|
|
|
IBlobContainerConfigurationProvider configurationProvider, |
|
|
|
IServiceScopeFactory serviceScopeFactory, |
|
|
|
IHttpClientFactory httpClientFactory, |
|
|
|
IOptions<AbpOssManagementOptions> options) |
|
|
|
: base(options, serviceScopeFactory) |
|
|
|
{ |
|
|
|
Clock = clock; |
|
|
|
Logger = logger; |
|
|
|
CurrentTenant = currentTenant; |
|
|
|
HttpClientFactory = httpClientFactory; |
|
|
|
MinioBlobNameCalculator = minioBlobNameCalculator; |
|
|
|
BlobNormalizeNamingService = blobNormalizeNamingService; |
|
|
|
ConfigurationProvider = configurationProvider; |
|
|
|
@ -440,23 +444,10 @@ public class MinioOssContainer : OssContainerBase, IOssObjectExpireor |
|
|
|
throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); |
|
|
|
} |
|
|
|
|
|
|
|
var memoryStream = new MemoryStream(); |
|
|
|
var getObjectArgs = new GetObjectArgs() |
|
|
|
var getObjectResult = await client.StatObjectAsync( |
|
|
|
new StatObjectArgs() |
|
|
|
.WithBucket(bucket) |
|
|
|
.WithObject(objectName) |
|
|
|
.WithCallbackStream((stream) => |
|
|
|
{ |
|
|
|
if (stream != null) |
|
|
|
{ |
|
|
|
stream.CopyTo(memoryStream); |
|
|
|
memoryStream.Seek(0, SeekOrigin.Begin); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
memoryStream = null; |
|
|
|
} |
|
|
|
}); |
|
|
|
var getObjectResult = await client.GetObjectAsync(getObjectArgs); |
|
|
|
.WithObject(objectName)); |
|
|
|
|
|
|
|
var ossObject = new OssObject( |
|
|
|
!objectPath.IsNullOrWhiteSpace() |
|
|
|
@ -465,7 +456,7 @@ public class MinioOssContainer : OssContainerBase, IOssObjectExpireor |
|
|
|
request.Path, |
|
|
|
getObjectResult.ETag, |
|
|
|
getObjectResult.LastModified, |
|
|
|
memoryStream.Length, |
|
|
|
getObjectResult.Size, |
|
|
|
getObjectResult.LastModified, |
|
|
|
getObjectResult.MetaData, |
|
|
|
getObjectResult.ObjectName.EndsWith("/")) |
|
|
|
@ -473,9 +464,16 @@ public class MinioOssContainer : OssContainerBase, IOssObjectExpireor |
|
|
|
FullName = getObjectResult.ObjectName.Replace(prefixPath, "") |
|
|
|
}; |
|
|
|
|
|
|
|
if (memoryStream.Length > 0) |
|
|
|
if (getObjectResult.Size > 0) |
|
|
|
{ |
|
|
|
ossObject.SetContent(memoryStream); |
|
|
|
var objectUrl = await client.PresignedGetObjectAsync( |
|
|
|
new PresignedGetObjectArgs() |
|
|
|
.WithBucket(bucket) |
|
|
|
.WithObject(objectName) |
|
|
|
.WithExpiry(3600)); |
|
|
|
var httpClient = HttpClientFactory.CreateMinioHttpClient(); |
|
|
|
|
|
|
|
ossObject.SetContent(await httpClient.GetStreamAsync(objectUrl)); |
|
|
|
} |
|
|
|
|
|
|
|
return ossObject; |
|
|
|
|