diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index 26e83ad4a5..14439cce0c 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -86,9 +86,7 @@ namespace Volo.Abp.BlobStoring.Aliyun return null; } var result = ossClient.GetObject(containerName, blobName); - var memoryStream = new MemoryStream(); - await result.Content.CopyToAsync(memoryStream); - return memoryStream; + return await TryCopyToMemoryStreamAsync(result.Content, args.CancellationToken); } protected virtual string GetContainerName(BlobProviderArgs args) diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs index a922da2222..8d9a00eeb6 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs @@ -103,9 +103,7 @@ namespace Volo.Abp.BlobStoring.Aws Key = blobName }); - var memoryStream = new MemoryStream(); - await response.ResponseStream.CopyToAsync(memoryStream); - return memoryStream; + return await TryCopyToMemoryStreamAsync(response.ResponseStream, args.CancellationToken); } } 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 34181f2427..7ab14878dd 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 @@ -67,9 +67,7 @@ namespace Volo.Abp.BlobStoring.Azure var blobClient = GetBlobClient(args, blobName); var download = await blobClient.DownloadAsync(); - var memoryStream = new MemoryStream(); - await download.Value.Content.CopyToAsync(memoryStream); - return memoryStream; + return await TryCopyToMemoryStreamAsync(download.Value.Content, args.CancellationToken); } protected virtual BlobClient GetBlobClient(BlobProviderArgs args, string blobName) diff --git a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs index cbfe4bcaf7..69d83aa3e5 100644 --- a/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs @@ -74,9 +74,7 @@ namespace Volo.Abp.BlobStoring.FileSystem { using (var fileStream = File.OpenRead(filePath)) { - var memoryStream = new MemoryStream(); - await fileStream.CopyToAsync(memoryStream, args.CancellationToken); - return memoryStream; + return await TryCopyToMemoryStreamAsync(fileStream, args.CancellationToken); } }); } diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs index e0f52fffda..9587aeffc3 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs @@ -75,20 +75,13 @@ namespace Volo.Abp.BlobStoring.Minio return null; } - var memoryStream = new MemoryStream(); + Stream blobStream = null; await client.GetObjectAsync(containerName, blobName, (stream) => { - if (stream != null) - { - stream.CopyTo(memoryStream); - } - else - { - memoryStream = null; - } + blobStream = stream; }); - return memoryStream; + return await TryCopyToMemoryStreamAsync(blobStream, args.CancellationToken); } protected virtual MinioClient GetMinioClient(BlobProviderArgs args) diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs index ea2bd1ed72..2bf677d0e8 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs @@ -1,4 +1,5 @@ using System.IO; +using System.Threading; using System.Threading.Tasks; namespace Volo.Abp.BlobStoring @@ -12,5 +13,18 @@ namespace Volo.Abp.BlobStoring public abstract Task ExistsAsync(BlobProviderExistsArgs args); public abstract Task GetOrNullAsync(BlobProviderGetArgs args); + + protected virtual async Task TryCopyToMemoryStreamAsync(Stream stream, CancellationToken cancellationToken = default) + { + if(stream == null) + { + return null; + } + + var memoryStream = new MemoryStream(); + await stream.CopyToAsync(memoryStream, cancellationToken); + memoryStream.Seek(0, SeekOrigin.Begin); + return memoryStream; + } } }