Example #1
0
        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)));
        }
Example #2
0
        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");
        }
Example #4
0
        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;
            }
        }