public async Task PostAsync(S3FileKey key, TValue source)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            var stream   = _containerConverter.GetStream(source);
            var metaData = _containerConverter.GetMetaData(source);

            stream.Position = 0;
            var request = new PutObjectRequest
            {
                BucketName      = BucketNameConstructor.GetBucketName(key),
                Key             = key.Key,
                InputStream     = stream,
                TagSet          = metaData.ToTagSet(_containerConverter.GetOriginKey()).ToList(),
                AutoCloseStream = false
            };

            metaData.CopyToMetadataCollection(request.Metadata, _containerConverter.GetOriginKey());
            await AmazonS3.PutObjectAsync(request);

            stream.Position = 0;
        }
Example #2
0
        private async Task <GetObjectResponse> GetObjectAsync(S3FileKey key)
        {
            var request = new GetObjectRequest
            {
                BucketName = BucketNameConstructor.GetBucketName(key),
                Key        = key.Key,
                VersionId  = key.VersionId
            };

            return(await AmazonS3.GetObjectAsync(request));
        }
Example #3
0
        private ListObjectsV2Request CreateRequest(S3FolderKey filter)
        {
            var request = new ListObjectsV2Request
            {
                BucketName = BucketNameConstructor.GetBucketName(filter),
                Prefix     = filter.Key,
                Delimiter  = "/"
            };

            return(request);
        }
Example #4
0
        private async Task <IDictionary <string, string> > GetTagsAsync(S3FileKey key)
        {
            var getTagsRequest = new GetObjectTaggingRequest
            {
                BucketName = BucketNameConstructor.GetBucketName(key),
                Key        = key.Key,
                VersionId  = key.VersionId
            };

            var objectTags = await AmazonS3.GetObjectTaggingAsync(getTagsRequest);

            return(objectTags.Tagging.ToDictionary());
        }
Example #5
0
        public async Task DeleteAsync(S3FileKey key)
        {
            if (key == null)
            {
                throw new ArgumentNullException(nameof(key));
            }
            var request = new DeleteObjectRequest
            {
                BucketName = BucketNameConstructor.GetBucketName(key),
                Key        = key.Key
            };

            await AmazonS3.DeleteObjectAsync(request);
        }
Example #6
0
        private async Task <IEnumerable <S3ObjectVersion> > GetS3ObjectVersions(S3FileKey key)
        {
            var request = new ListVersionsRequest
            {
                BucketName = BucketNameConstructor.GetBucketName(key),
                Prefix     = key.Key
            };

            var result = new List <S3ObjectVersion>();
            ListVersionsResponse response;

            do
            {
                response = await AmazonS3.ListVersionsAsync(request);

                result.AddRange(response.Versions);

                request.VersionIdMarker = response.NextVersionIdMarker;
                request.KeyMarker       = response.NextKeyMarker;
            } while (response.IsTruncated);

            return(result);
        }
Example #7
0
        private IEnumerable <DeleteObjectsRequest> CreateRequests(IList <S3FileKey> fileKeys, S3FolderKey folderKey)
        {
            var requests = new List <DeleteObjectsRequest>();

            int requestCount = fileKeys.Count / FilesLimitPerRequest + 1;

            for (var i = 0; i < requestCount; i++)
            {
                var request = new DeleteObjectsRequest
                {
                    BucketName = BucketNameConstructor.GetBucketName(folderKey),
                    Objects    = fileKeys.Skip(i * FilesLimitPerRequest)
                                 .Take(FilesLimitPerRequest)
                                 .Select(k => new KeyVersion
                    {
                        Key = k.Key
                    }).ToList()
                };

                requests.Add(request);
            }

            return(requests);
        }