public async Task S3Service_Should_List_Files_In_A_Bucket() { var bucketName = Guid.NewGuid().ToString(); await CreateTestBucket(bucketName); const int uploadCount = 4; var fileNames = new string[uploadCount]; for (var i = 0; i < uploadCount; i++) { var fileName = $"SampleData{i}.txt"; await UploadTestFile(fileName, bucketName); fileNames[i] = fileName; } ListObjectsResponse listObjectsResponse = await AmazonS3.ListObjectsAsync(bucketName); List <S3Object> s3Objects = listObjectsResponse.S3Objects; Assert.Equal(uploadCount, s3Objects.Count); Assert.All(fileNames, s => Assert.NotNull(s3Objects.FirstOrDefault(o => o.Key == s))); }
public async Task <IReadOnlyDictionary <string, string> > ListAsync(string name, CancellationToken cancellationToken) { var files = new Dictionary <string, string>(); var request = new ListObjectsRequest { BucketName = _pathManager.Bucket, Prefix = _pathManager.GetTreeNamePrefix(name) }; for (; ;) { var response = await AmazonS3.ListObjectsAsync(request, cancellationToken).ConfigureAwait(false); foreach (var s3Object in response.S3Objects) { var key = _pathManager.GetKeyFromTreeNamePath(name, s3Object.Key); files[key] = s3Object.ETag; } if (!response.IsTruncated) { return(files); } request.Marker = response.NextMarker; } }
static void Main(string[] args) { // args "bucket-name" "container-name" "storageaccount-name" "storageaccount-key" Console.WriteLine("Listing AWS"); var awsListTask = AmazonS3.ListObjectsAsync(args[0]); Console.WriteLine("Listing Azure"); var azureListTask = AzureContainer.ListAsync(args[1], args[2], args[3]); Console.WriteLine("Awaiting both"); Task.WhenAll(awsListTask, azureListTask); Console.WriteLine("Comparing"); Compare(awsListTask.Result, azureListTask.Result); File.AppendAllLines(AppDomain.CurrentDomain.BaseDirectory + "\\aws.txt", awsListTask.Result); File.AppendAllLines(AppDomain.CurrentDomain.BaseDirectory + "\\az.txt", azureListTask.Result); Console.WriteLine("Done"); }
async Task <Dictionary <string, string> > ListAsync(string prefix, Statistics statistics, CancellationToken cancellationToken) { var keys = new Dictionary <string, string>(); var request = new ListObjectsRequest { BucketName = _pathManager.Bucket, Prefix = prefix, Delimiter = "/" }; for (; ;) { var response = await AmazonS3.ListObjectsAsync(request, cancellationToken).ConfigureAwait(false); foreach (var s3Object in response.S3Objects) { var key = _pathManager.GetKeyFromBlobPath(s3Object.Key); // Ignore the folder itself (if there is an empty object there). if (null == key) { continue; } if (null != statistics) { Interlocked.Increment(ref statistics.Count); Interlocked.Add(ref statistics.TotalSize, s3Object.Size); } keys[key] = s3Object.ETag; } if (!response.IsTruncated) { return(keys); } request.Marker = response.NextMarker; } }