private async Task DeleteAsync( string fullPath, AmazonS3Client client, CancellationToken cancellationToken = default) { GenericValidation.CheckBlobFullPath(fullPath); fullPath = StoragePath.Normalize(fullPath); await client.DeleteObjectAsync(this._bucketName, fullPath, cancellationToken).ConfigureAwait(false); using AwsS3DirectoryBrowser browser = new AwsS3DirectoryBrowser(client, this._bucketName); await browser.DeleteRecursiveAsync(fullPath, cancellationToken).ConfigureAwait(false); }
/// <summary> /// Lists all buckets, optionally filtering by prefix. Prefix filtering happens on client side. /// </summary> public async Task <IReadOnlyCollection <Blob> > ListAsync( ListOptions?options = null, CancellationToken cancellationToken = default) { options ??= new ListOptions(); GenericValidation.CheckBlobPrefix(options.FilePrefix); AmazonS3Client client = await this.GetClientAsync().ConfigureAwait(false); IReadOnlyCollection <Blob> blobs; using (AwsS3DirectoryBrowser browser = new AwsS3DirectoryBrowser(client, this._bucketName)) blobs = await browser.ListAsync(options, cancellationToken).ConfigureAwait(false); if (options.IncludeAttributes) { foreach (IEnumerable <Blob> blobs1 in blobs.Where(b => !b.IsFolder) .Chunk(10)) { await Converter.AppendMetadataAsync(client, this._bucketName, blobs1, cancellationToken) .ConfigureAwait(false); } } return(blobs); }