Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 8 additions & 12 deletions src/Plugins/AWSS3/AWS3StorageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,16 +83,14 @@ public async Task CopyObjectAsync(string sourceBucketName, string sourceObjectNa
await _client.CopyObjectAsync(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName, cancellationToken: cancellationToken).ConfigureAwait(false);
}

public async Task GetObjectAsync(string bucketName, string objectName, Action<Stream> callback, CancellationToken cancellationToken = default)
public async Task<Stream> GetObjectAsync(string bucketName, string objectName, CancellationToken cancellationToken = default)
{
Guard.Against.NullOrWhiteSpace(bucketName, nameof(bucketName));
Guard.Against.NullOrWhiteSpace(objectName, nameof(objectName));
Guard.Against.Null(callback, nameof(callback));

using (var obj = await _client.GetObjectAsync(bucketName, objectName, cancellationToken: cancellationToken).ConfigureAwait(false))
{
callback(obj.ResponseStream);
}
var obj = await _client.GetObjectAsync(bucketName, objectName, cancellationToken: cancellationToken).ConfigureAwait(false);

return obj.ResponseStream;
}

public async Task<IList<VirtualFileInfo>> ListObjectsAsync(string bucketName, string prefix = "", bool recursive = false, CancellationToken cancellationToken = default)
Expand Down Expand Up @@ -209,19 +207,17 @@ public async Task CopyObjectWithCredentialsAsync(string sourceBucketName, string
await client.CopyObjectAsync(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName, cancellationToken: cancellationToken).ConfigureAwait(false);
}

public async Task GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, Action<Stream> callback, CancellationToken cancellationToken = default)
public async Task<Stream> GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, CancellationToken cancellationToken = default)
{
Guard.Against.NullOrWhiteSpace(bucketName, nameof(bucketName));
Guard.Against.NullOrWhiteSpace(objectName, nameof(objectName));
Guard.Against.Null(callback, nameof(callback));

IsCredentialsNull(credentials);
var client = new AmazonS3Client(credentials.AccessKeyId, credentials.SecretAccessKey, RegionEndpoint.GetBySystemName(_options.Settings[ConfigurationKeys.Region]));

using (var obj = await client.GetObjectAsync(bucketName, objectName, cancellationToken: cancellationToken).ConfigureAwait(false))
{
callback(obj.ResponseStream);
}
var obj = await client.GetObjectAsync(bucketName, objectName, cancellationToken: cancellationToken).ConfigureAwait(false);

return obj.ResponseStream;
}

public async Task<IList<VirtualFileInfo>> ListObjectsWithCredentialsAsync(string bucketName, Credentials credentials, string prefix = "", bool recursive = false, CancellationToken cancellationToken = default)
Expand Down
18 changes: 12 additions & 6 deletions src/Plugins/MinIO/MinIoStorageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,17 @@ public async Task CopyObjectAsync(string sourceBucketName, string sourceObjectNa
await CopyObjectUsingClient(client, sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName, cancellationToken).ConfigureAwait(false);
}

public async Task GetObjectAsync(string bucketName, string objectName, Action<Stream> callback, CancellationToken cancellationToken = default)
public async Task<Stream> GetObjectAsync(string bucketName, string objectName, CancellationToken cancellationToken = default)
{
Guard.Against.NullOrWhiteSpace(bucketName, nameof(bucketName));
Guard.Against.NullOrWhiteSpace(objectName, nameof(objectName));
Guard.Against.Null(callback, nameof(callback));

var stream = new MemoryStream();

var client = _minioClientFactory.GetClient();
await GetObjectUsingClient(client, bucketName, objectName, callback, cancellationToken).ConfigureAwait(false);
await GetObjectUsingClient(client, bucketName, objectName, async (s) => await s.CopyToAsync(stream), cancellationToken).ConfigureAwait(false);

return stream;
}

public async Task<IList<VirtualFileInfo>> ListObjectsAsync(string bucketName, string? prefix = "", bool recursive = false, CancellationToken cancellationToken = default)
Expand Down Expand Up @@ -211,15 +214,18 @@ public async Task CopyObjectWithCredentialsAsync(string sourceBucketName, string
await CopyObjectUsingClient(client, sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName, cancellationToken).ConfigureAwait(false);
}

public async Task GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, Action<Stream> callback, CancellationToken cancellationToken = default)
public async Task<Stream> GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, CancellationToken cancellationToken = default)
{
Guard.Against.NullOrWhiteSpace(bucketName, nameof(bucketName));
Guard.Against.NullOrWhiteSpace(objectName, nameof(objectName));
Guard.Against.Null(callback, nameof(callback));

var stream = new MemoryStream();

var client = _minioClientFactory.GetClient(credentials, _options.Settings[ConfigurationKeys.Region]);

await GetObjectUsingClient(client, bucketName, objectName, callback, cancellationToken: cancellationToken).ConfigureAwait(false);
await GetObjectUsingClient(client, bucketName, objectName, async (s) => await s.CopyToAsync(stream), cancellationToken).ConfigureAwait(false);

return stream;
}

public async Task<IList<VirtualFileInfo>> ListObjectsWithCredentialsAsync(string bucketName, Credentials credentials, string? prefix = "", bool recursive = false, CancellationToken cancellationToken = default)
Expand Down
7 changes: 3 additions & 4 deletions src/Storage/API/IStorageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,9 @@ public interface IStorageService
/// </summary>
/// <param name="bucketName">Name of the bucket</param>
/// <param name="objectName">Name of the object in the bucket</param>
/// <param name="callback">Action to be called when stream is ready</param>
/// <param name="cancellationToken">Optional cancellation token. Defaults to default(CancellationToken)</param>
/// <returns>Task</returns>
Task GetObjectAsync(string bucketName, string objectName, Action<Stream> callback, CancellationToken cancellationToken = default);
/// <returns>Stream</returns>
Task<Stream> GetObjectAsync(string bucketName, string objectName, CancellationToken cancellationToken = default);

/// <summary>
/// Uploads an object.
Expand Down Expand Up @@ -132,7 +131,7 @@ public interface IStorageService
/// <param name="callback">Action to be called when stream is ready</param>
/// <param name="cancellationToken">Optional cancellation token. Defaults to default(CancellationToken)</param>
/// <returns>Task</returns>
Task GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, Action<Stream> callback, CancellationToken cancellationToken = default);
Task<Stream> GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, CancellationToken cancellationToken = default);

/// <summary>
/// Lists objects in a bucket using temporary credentials.
Expand Down
4 changes: 4 additions & 0 deletions src/Storage/Tests/IServiceCollectionExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,12 @@ internal class GoodStorageService : IStorageService

public Task GetObjectAsync(string bucketName, string objectName, Action<Stream> callback, CancellationToken cancellationToken = default) => throw new NotImplementedException();

public Task<Stream> GetObjectAsync(string bucketName, string objectName, CancellationToken cancellationToken = default) => throw new NotImplementedException();

public Task GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, Action<Stream> callback, CancellationToken cancellationToken = default) => throw new NotImplementedException();

public Task<Stream> GetObjectWithCredentialsAsync(string bucketName, string objectName, Credentials credentials, CancellationToken cancellationToken = default) => throw new NotImplementedException();

public Task<IList<VirtualFileInfo>> ListObjectsAsync(string bucketName, string prefix = "", bool recursive = false, CancellationToken cancellationToken = default) => throw new NotImplementedException();

public Task<IList<VirtualFileInfo>> ListObjectsWithCredentialsAsync(string bucketName, Credentials credentials, string prefix = "", bool recursive = false, CancellationToken cancellationToken = default) => throw new NotImplementedException();
Expand Down