コード例 #1
0
        private async Task CreateAndFillBucket(int numberOfObjects)
        {
            bool exists = await client.BucketExistsAsync(sourceBucket);

            List <PutObjectResponse> fails = new List <PutObjectResponse>();

            if (!exists)
            {
                PutBucketRequest newBucket = new PutBucketRequest()
                {
                    BucketName   = sourceBucket,
                    BucketRegion = S3Region.US
                };

                PutBucketResponse response = await client.PutBucketAsync(newBucket);
            }

            Random rand = new Random();

            List <Task <PutObjectResponse> > tasks = new List <Task <PutObjectResponse> >();

            int totalJobs = numberOfObjects / 100;

            if (totalJobs == 0)
            {
                totalJobs = 1;
            }

            for (int i = 0; i < totalJobs; i++)
            {
                int files = (i == totalJobs - 1 ? (numberOfObjects % 100 == 0 ? 100 : numberOfObjects % 100) : 100);

                for (int j = 0; j < files; j++)
                {
                    int size = rand.Next(MIN_SIZE_128KB, MAX_SIZE_10MB);

                    byte[] contents = new byte[size];

                    rand.NextBytes(contents);

                    PutObjectRequest put = new PutObjectRequest()
                    {
                        BucketName      = sourceBucket,
                        Key             = Guid.NewGuid().ToString(),
                        StorageClass    = S3StorageClass.OneZoneInfrequentAccess,
                        ContentType     = "application/octet-stream",
                        AutoCloseStream = true,
                        TagSet          = new List <Tag>()
                        {
                            new Tag()
                            {
                                Key = "owner", Value = Environment.UserName
                            }
                        },
                        InputStream = new MemoryStream(contents)
                    };

                    tasks.Add(client.PutObjectAsync(put));
                }

                try
                {
                    int counter = 0;

                    foreach (Task <PutObjectResponse> response in tasks.Interleaved())
                    {
                        counter++;
                        if (response.Result.HttpStatusCode != HttpStatusCode.OK)
                        {
                            fails.Add(response.Result);
                        }
                    }

                    tasks.Clear();
                    tasks = new List <Task <PutObjectResponse> >();

                    GC.Collect();

                    if (counter != files)
                    {
                    }
                }
                catch (Exception e)
                {
                }
            }
        }