예제 #1
0
        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);
        }
예제 #2
0
        /// <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);
        }