Exemple #1
0
 /// <summary>
 /// Deletes a collection of files to S3. For large uploads, the file will be divided and uploaded in parts
 /// using Amazon S3's multipart API. The parts will be reassembled as one object in Amazon S3.
 /// </summary>
 /// <param name="keys">The set of keys under which the Amazon S3 object is stored.</param>
 /// <param name="settings">The <see cref="S3Settings"/> required to upload to Amazon S3.</param>
 public void Delete(IList <string> keys, S3Settings settings)
 {
     foreach (string key in keys)
     {
         this.Delete(key, "", settings);
     }
 }
Exemple #2
0
        //Request
        private AmazonS3Client GetClient(S3Settings settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            if (settings.Region == null)
            {
                throw new ArgumentNullException("settings.Region");
            }

            if (settings.Credentials == null)
            {
                if (String.IsNullOrEmpty(settings.AccessKey))
                {
                    throw new ArgumentNullException("settings.AccessKey");
                }
                if (String.IsNullOrEmpty(settings.SecretKey))
                {
                    throw new ArgumentNullException("settings.SecretKey");
                }

                return(new AmazonS3Client(settings.AccessKey, settings.SecretKey, settings.Region));
            }
            else
            {
                return(new AmazonS3Client(settings.Credentials, settings.Region));
            }
        }
Exemple #3
0
        /// <summary>
        /// Retrieves object from Amazon S3.
        /// </summary>
        /// <param name="key">The key under which the Amazon S3 object is stored.</param>
        /// <param name="version">The identifier for the specific version of the object to be deleted, if required.</param>
        /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
        public S3Object GetObject(string key, string version, S3Settings settings)
        {
            AmazonS3Client   client  = this.GetClient(settings);
            GetObjectRequest request = this.CreateGetObjectRequest(key, version, settings);

            _Log.Verbose("Get object {0} from bucket {1}...", key, settings.BucketName);

            try
            {
                GetObjectResponse response = client.GetObject(request);

                return(new S3Object()
                {
                    Key = response.Key,
                    ETag = response.ETag,

                    LastModified = response.LastModified,
                    StorageClass = response.StorageClass
                });
            }
            catch
            {
                _Log.Verbose("The object {0} does not exist in bucket {1}...", key, settings.BucketName);
                return(null);
            }
        }
Exemple #4
0
        /// <summary>
        /// Returns all the objects in a S3 bucket.
        /// </summary>
        /// <param name="prefix">Limits the response to keys that begin with the specified prefix.</param>
        /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
        public IList <S3Object> GetObjects(string prefix, S3Settings settings)
        {
            IList <S3Object> objects = new List <S3Object>();

            bool   call   = true;
            string marker = "";

            AmazonS3Client client = this.GetClient(settings);

            _Log.Verbose("Get objects from bucket {0}...", settings.BucketName);

            while (call)
            {
                ListObjectsRequest request = new ListObjectsRequest();
                request.BucketName = settings.BucketName;
                request.Marker     = marker;

                if (!String.IsNullOrEmpty(prefix))
                {
                    request.Prefix = prefix;
                }

                ListObjectsResponse response = client.ListObjects(request);
                call   = response.IsTruncated;
                marker = response.NextMarker;

                response.S3Objects.ForEach((lItem) =>
                {
                    objects.Add(lItem);
                });
            }

            return(objects);
        }
Exemple #5
0
        /// <summary>
        /// Removes the null version (if there is one) of an object and inserts a delete
        /// marker, which becomes the latest version of the object. If there isn't a null
        /// version, Amazon S3 does not remove any objects.
        /// </summary>
        /// <param name="key">The key under which the Amazon S3 object is stored.</param>
        /// <param name="version">The identifier for the specific version of the object to be deleted, if required.</param>
        /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
        public void Delete(string key, string version, S3Settings settings)
        {
            AmazonS3Client      client  = this.GetClient(settings);
            DeleteObjectRequest request = new DeleteObjectRequest();

            request.BucketName = settings.BucketName;
            request.Key        = key;

            if (!String.IsNullOrEmpty(version))
            {
                request.VersionId = version;
            }

            _Log.Verbose("Deleting object {0} from bucket {1}...", key, settings.BucketName);
            client.DeleteObject(request);
        }
Exemple #6
0
        /// <summary>
        /// Removes all objects from the bucket
        /// </summary>
        /// <param name="prefix">Only delete objects that begin with the specified prefix.</param>
        /// <param name="lastModified">Only delete objects that where modified prior to this date.</param>
        /// <param name="settings">The <see cref="S3Settings"/> required to delete from Amazon S3.</param>
        public IList <string> DeleteAll(string prefix, DateTimeOffset lastModified, S3Settings settings)
        {
            //Get S3 Objects
            IList <S3Object> objects = this.GetObjects(prefix, settings);
            List <string>    list    = new List <string>();

            foreach (S3Object obj in objects)
            {
                if ((lastModified == DateTimeOffset.MinValue) && (obj.LastModified < lastModified))
                {
                    list.Add(obj.Key);
                }
            }



            //Delete
            AmazonS3Client client = this.GetClient(settings);

            while (list.Count > 0)
            {
                int max = list.Count;
                if (max > 1000)
                {
                    max = 1000;
                }

                DeleteObjectsRequest request = new DeleteObjectsRequest();
                request.BucketName = settings.BucketName;

                for (int index = 0; index < max; index++)
                {
                    request.AddKey(list[index]);
                }

                client.DeleteObjects(request);
                _Log.Verbose("Deleting {0} objects from bucket {1}...", max, settings.BucketName);

                list.RemoveRange(0, max);
            }

            return(list);
        }
Exemple #7
0
        private GetObjectRequest CreateGetObjectRequest(string key, string version, S3Settings settings)
        {
            GetObjectRequest request = new GetObjectRequest();

            request.BucketName = settings.BucketName;
            request.Key        = key;

            if (!String.IsNullOrEmpty(version))
            {
                request.VersionId = version;
            }

            request.ServerSideEncryptionCustomerProvidedKey    = settings.EncryptionKey;
            request.ServerSideEncryptionCustomerProvidedKeyMD5 = settings.EncryptionKeyMD5;
            request.ServerSideEncryptionCustomerMethod         = settings.EncryptionMethod;

            if (!String.IsNullOrEmpty(settings.EncryptionKey))
            {
                request.ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256;
            }

            return(request);
        }
Exemple #8
0
        /// <summary>
        /// Create a signed URL allowing access to a resource that would usually require authentication. cts
        /// </summary>
        /// <param name="key">The key under which the Amazon S3 object is stored.</param>
        /// <param name="version">The identifier for the specific version of the object to be deleted, if required.</param>
        /// <param name="expires">The expiry date and time for the pre-signed url.</param>
        /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
        public string GetPreSignedURL(string key, string version, DateTime expires, S3Settings settings)
        {
            AmazonS3Client client = this.GetClient(settings);

            GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
            {
                BucketName = settings.BucketName,
                Key        = key,
                VersionId  = version,
                Expires    = expires
            };

            _Log.Verbose("Get object {0} from bucket {1}...", key, settings.BucketName);

            try
            {
                return(client.GetPreSignedURL(request));
            }
            catch
            {
                _Log.Verbose("The object {0} does not exist in bucket {1}...", key, settings.BucketName);
                return("");
            }
        }
Exemple #9
0
 public static async Task<S3Object> GetS3Object(this ICakeContext context, string key, string version, S3Settings settings)
 {
     return await context.CreateManager().GetObject(key, version, settings);
 }
Exemple #10
0
 public static async Task<DateTimeOffset> S3LastModified(this ICakeContext context, string key, S3Settings settings)
 {
     return await context.S3LastModified(key, "", settings);
 }
Exemple #11
0
 public static void S3DeleteAll(this ICakeContext context, string prefix, S3Settings settings)
 {
     context.CreateManager().DeleteAll(prefix, DateTimeOffset.MinValue, settings);
 }
Exemple #12
0
 public static async Task S3Delete(this ICakeContext context, string key, string version, S3Settings settings)
 {
     await context.CreateManager().Delete(key, version, settings);
 }
Exemple #13
0
 public static DateTimeOffset S3LastModified(this ICakeContext context, string key, S3Settings settings)
 {
     return(context.S3LastModified(key, "", settings));
 }
Exemple #14
0
 public static S3Object GetS3Object(this ICakeContext context, string key, string version, S3Settings settings)
 {
     return context.CreateManager().GetObject(key, version, settings);
 }
Exemple #15
0
            /// <summary>
            /// Create a signed URL allowing access to a resource that would usually require authentication. cts
            /// </summary>
            /// <param name="key">The key under which the Amazon S3 object is stored.</param>
            /// <param name="version">The identifier for the specific version of the object to be deleted, if required.</param>
            /// <param name="expires">The expiry date and time for the pre-signed url.</param>
            /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
            public string GetPreSignedURL(string key, string version, DateTime expires, S3Settings settings)
            {
                AmazonS3Client client = this.GetClient(settings);

                GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
                {
                    BucketName = settings.BucketName,
                    Key = key,
                    VersionId = version,
                    Expires = expires
                };

                _Log.Verbose("Get object {0} from bucket {1}...", key, settings.BucketName);

                try
                {
                    return client.GetPreSignedURL(request);
                }
                catch
                {
                    _Log.Verbose("The object {0} does not exist in bucket {1}...", key, settings.BucketName);
                    return "";
                }
            }
Exemple #16
0
 public static IList <string> S3DeleteAll(this ICakeContext context, S3Settings settings)
 {
     return(context.CreateManager().DeleteAll("", DateTimeOffset.MinValue, settings));
 }
Exemple #17
0
            /// <summary>
            /// Retrieves object Metadata from Amazon S3.
            /// </summary>
            /// <param name="key">The key under which the Amazon S3 object is stored.</param>
            /// <param name="version">The identifier for the specific version of the object to be deleted, if required.</param>
            /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
            public MetadataCollection GetObjectMetaData(string key, string version, S3Settings settings)
            {
                AmazonS3Client client = this.GetClient(settings);
                GetObjectMetadataRequest request = this.CreateGetObjectMetadataRequest(key, version, settings);

                _Log.Verbose("Get object {0} from bucket {1}...", key, settings.BucketName);

                try
                {
                    GetObjectMetadataResponse response = client.GetObjectMetadata(request);

                    return response.Metadata;
                }
                catch
                {
                    _Log.Verbose("The object {0} does not exist in bucket {1}...", key, settings.BucketName);
                    return null;
                }
            }
Exemple #18
0
            /// <summary>
            /// Returns all the objects in a S3 bucket.
            /// </summary>
            /// <param name="prefix">Limits the response to keys that begin with the specified prefix.</param>
            /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
            public IList<S3Object> GetObjects(string prefix, S3Settings settings)
            {
                IList<S3Object> objects = new List<S3Object>();

                bool call = true;
                string marker = "";

                AmazonS3Client client = this.GetClient(settings);

                _Log.Verbose("Get objects from bucket {0}...", settings.BucketName);

                while (call)
                {
                    ListObjectsRequest request = new ListObjectsRequest();
                    request.BucketName = settings.BucketName;
                    request.Marker = marker;

                    if (!String.IsNullOrEmpty(prefix))
                    {
                        request.Prefix = prefix;
                    }

                    ListObjectsResponse response = client.ListObjects(request);
                    call = response.IsTruncated;
                    marker = response.NextMarker;

                    response.S3Objects.ForEach((lItem) =>
                    {
                        objects.Add(lItem);
                    });
                }

                return objects;
            }
Exemple #19
0
            /// <summary>
            /// Retrieves object from Amazon S3.
            /// </summary>
            /// <param name="key">The key under which the Amazon S3 object is stored.</param>
            /// <param name="version">The identifier for the specific version of the object to be deleted, if required.</param>
            /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
            public S3Object GetObject(string key, string version, S3Settings settings)
            {
                AmazonS3Client client = this.GetClient(settings);
                GetObjectRequest request = this.CreateGetObjectRequest(key, version, settings);

                _Log.Verbose("Get object {0} from bucket {1}...", key, settings.BucketName);

                try
                {
                    GetObjectResponse response = client.GetObject(request);

                    return new S3Object()
                    {
                        Key = response.Key,
                        ETag = response.ETag,

                        LastModified = response.LastModified,
                        StorageClass = response.StorageClass
                    };
                }
                catch
                {
                    _Log.Verbose("The object {0} does not exist in bucket {1}...", key, settings.BucketName);
                    return null;
                }
            }
Exemple #20
0
 public static string GetPreSignedURL(this ICakeContext context, string key, string version, DateTime expires, S3Settings settings)
 {
     return context.CreateManager().GetPreSignedURL(key, version, expires, settings);
 }
Exemple #21
0
        public static string S3GetHashTag(this ICakeContext context, string key, string version, S3Settings settings)
        {
            MetadataCollection result = context.CreateManager().GetObjectMetaData(key, version, settings);

            if ((result != null) && result.Keys.Contains("x-amz-meta-hashtag"))
            {
                return result["x-amz-meta-hashtag"];
            }
            else
            {
                return "";
            }
        }
Exemple #22
0
        public static async Task<string> S3GetETag(this ICakeContext context, string key, string version, S3Settings settings)
        {
            S3Object result = await context.CreateManager().GetObject(key, version, settings);

            if (result != null)
            {
                return result.ETag;
            }
            else
            {
                return "";
            }
        }
Exemple #23
0
 private TransferUtility GetUtility(S3Settings settings)
 {
     return new TransferUtility(this.GetClient(settings));
 }
Exemple #24
0
 public static void S3Delete(this ICakeContext context, string key, S3Settings settings)
 {
     context.S3Delete(key, "", settings);
 }
Exemple #25
0
            private GetObjectMetadataRequest CreateGetObjectMetadataRequest(string key, string version, S3Settings settings)
            {
                GetObjectMetadataRequest request = new GetObjectMetadataRequest();

                request.BucketName = settings.BucketName;
                request.Key = key;

                if (!String.IsNullOrEmpty(version))
                {
                    request.VersionId = version;
                }

                request.ServerSideEncryptionCustomerProvidedKey = settings.EncryptionKey;
                request.ServerSideEncryptionCustomerProvidedKeyMD5 = settings.EncryptionKeyMD5;
                request.ServerSideEncryptionCustomerMethod = settings.EncryptionMethod;

                if (!String.IsNullOrEmpty(settings.EncryptionKey))
                {
                    request.ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256;
                }

                return request;
            }
Exemple #26
0
 public static S3Object GetS3Object(this ICakeContext context, string key, string version, S3Settings settings)
 {
     return(context.CreateManager().GetObject(key, version, settings));
 }
Exemple #27
0
            //Directory
            private void SetWorkingDirectory(S3Settings settings)
            {
                DirectoryPath workingDirectory = settings.WorkingDirectory ?? _Environment.WorkingDirectory;

                settings.WorkingDirectory = workingDirectory.MakeAbsolute(_Environment);
            }
Exemple #28
0
 public static string S3GetHashTag(this ICakeContext context, string key, S3Settings settings)
 {
     return context.S3GetHashTag(key, "", settings);
 }
Exemple #29
0
            //Request
            private AmazonS3Client GetClient(S3Settings settings)
            {
                if (settings == null)
                {
                    throw new ArgumentNullException("settings");
                }
                
                if (settings.Region == null)
                {
                    throw new ArgumentNullException("settings.Region");
                }

                if (settings.Credentials == null)
                {
                    if (String.IsNullOrEmpty(settings.AccessKey))
                    {
                        throw new ArgumentNullException("settings.AccessKey");
                    }
                    if (String.IsNullOrEmpty(settings.SecretKey))
                    {
                        throw new ArgumentNullException("settings.SecretKey");
                    }

                    return new AmazonS3Client(settings.AccessKey, settings.SecretKey, settings.Region);
                }
                else
                {
                    return new AmazonS3Client(settings.Credentials, settings.Region);
                }
            }
Exemple #30
0
 public static void S3DeleteAll(this ICakeContext context, string prefix, DateTimeOffset lastModified, S3Settings settings)
 {
     context.CreateManager().DeleteAll(prefix, lastModified, settings);
 }
Exemple #31
0
 /// <summary>
 /// Deletes a collection of files to S3. For large uploads, the file will be divided and uploaded in parts 
 /// using Amazon S3's multipart API. The parts will be reassembled as one object in Amazon S3.
 /// </summary>
 /// <param name="keys">The set of keys under which the Amazon S3 object is stored.</param>
 /// <param name="settings">The <see cref="S3Settings"/> required to upload to Amazon S3.</param>
 public void Delete(IList<string> keys, S3Settings settings)
 {
     foreach(string key in keys)
     {
         this.Delete(key, "", settings);
     }
 }
Exemple #32
0
 public static async Task S3Delete(this ICakeContext context, string key, S3Settings settings)
 {
     await context.S3Delete(key, "", settings);
 }
Exemple #33
0
            /// <summary>
            /// Removes the null version (if there is one) of an object and inserts a delete
            /// marker, which becomes the latest version of the object. If there isn't a null
            /// version, Amazon S3 does not remove any objects.
            /// </summary>
            /// <param name="key">The key under which the Amazon S3 object is stored.</param>
            /// <param name="version">The identifier for the specific version of the object to be deleted, if required.</param>
            /// <param name="settings">The <see cref="S3Settings"/> required to download from Amazon S3.</param>
            public void Delete(string key, string version, S3Settings settings)
            {
                AmazonS3Client client = this.GetClient(settings);
                DeleteObjectRequest request = new DeleteObjectRequest();

                request.BucketName = settings.BucketName;
                request.Key = key;

                if (!String.IsNullOrEmpty(version))
                {
                    request.VersionId = version;
                }

                _Log.Verbose("Deleting object {0} from bucket {1}...", key, settings.BucketName);
                client.DeleteObject(request);
            }
Exemple #34
0
 public static async Task<IList<string>> S3DeleteAll(this ICakeContext context, string prefix, S3Settings settings)
 {
     return await context.CreateManager().DeleteAll(prefix, DateTimeOffset.MinValue, settings);
 }
Exemple #35
0
            /// <summary>
            /// Removes all objects from the bucket
            /// </summary>
            /// <param name="prefix">Only delete objects that begin with the specified prefix.</param>
            /// <param name="lastModified">Only delete objects that where modified prior to this date.</param>
            /// <param name="settings">The <see cref="S3Settings"/> required to delete from Amazon S3.</param>
            public IList<string> DeleteAll(string prefix, DateTimeOffset lastModified, S3Settings settings)
            {
                //Get S3 Objects
                IList<S3Object> objects = this.GetObjects(prefix, settings);
                List<string> list = new List<string>();
                foreach (S3Object obj in objects)
                {
                    if ((lastModified == DateTimeOffset.MinValue) && (obj.LastModified < lastModified))
                    {
                        list.Add(obj.Key);
                    }
                }



                //Delete
                AmazonS3Client client = this.GetClient(settings);

                while (list.Count > 0)
                {
                    int max = list.Count;
                    if (max > 1000)
                    {
                        max = 1000;
                    }

                    DeleteObjectsRequest request = new DeleteObjectsRequest();
                    request.BucketName = settings.BucketName;
                
                    for (int index = 0; index < max; index++)
                    {
                        request.AddKey(list[index]);
                    }

                    client.DeleteObjects(request);
                    _Log.Verbose("Deleting {0} objects from bucket {1}...", max, settings.BucketName);

                    list.RemoveRange(0, max);
                }
                
                return list;
            }
Exemple #36
0
 public static async Task<IList<S3Object>> GetS3Objects(this ICakeContext context, string prefix, S3Settings settings)
 {
     return await context.CreateManager().GetObjects(prefix, settings);
 }
Exemple #37
0
        public static DateTimeOffset S3LastModified(this ICakeContext context, string key, string version, S3Settings settings)
        {
            S3Object result = context.CreateManager().GetObject(key, version, settings);

            if (result != null)
            {
                return result.LastModified;
            }
            else
            {
                return DateTime.MinValue;
            }
        }
Exemple #38
0
        public static async Task<DateTimeOffset> S3LastModified(this ICakeContext context, string key, string version, S3Settings settings)
        {
            S3Object result = await context.CreateManager().GetObject(key, version, settings);

            if (result != null)
            {
                return result.LastModified;
            }
            else
            {
                return DateTime.MinValue;
            }
        }
Exemple #39
0
        public static string S3GetETag(this ICakeContext context, string key, string version, S3Settings settings)
        {
            S3Object result = context.CreateManager().GetObject(key, version, settings);

            if (result != null)
            {
                return(result.ETag);
            }
            else
            {
                return("");
            }
        }
Exemple #40
0
 public static async Task<string> S3GetHashTag(this ICakeContext context, string key, S3Settings settings)
 {
     return await context.S3GetHashTag(key, "", settings);
 }
Exemple #41
0
        public static string S3GetHashTag(this ICakeContext context, string key, string version, S3Settings settings)
        {
            MetadataCollection result = context.CreateManager().GetObjectMetaData(key, version, settings);

            if ((result != null) && result.Keys.Contains("x-amz-meta-hashtag"))
            {
                return(result["x-amz-meta-hashtag"]);
            }
            else
            {
                return("");
            }
        }
Exemple #42
0
 public static void S3Delete(this ICakeContext context, string key, string version, S3Settings settings)
 {
     context.CreateManager().Delete(key, version, settings);
 }
Exemple #43
0
 public static void S3Delete(this ICakeContext context, string key, string version, S3Settings settings)
 {
     context.CreateManager().Delete(key, version, settings);
 }
Exemple #44
0
 public static IList <string> S3DeleteAll(this ICakeContext context, string prefix, DateTimeOffset lastModified, S3Settings settings)
 {
     return(context.CreateManager().DeleteAll(prefix, lastModified, settings));
 }
Exemple #45
0
 public static DateTimeOffset S3LastModified(this ICakeContext context, string key, S3Settings settings)
 {
     return context.S3LastModified(key, "", settings);
 }
Exemple #46
0
 public static IList <S3Object> GetS3Objects(this ICakeContext context, string prefix, S3Settings settings)
 {
     return(context.CreateManager().GetObjects(prefix, settings));
 }
Exemple #47
0
 public static IList<S3Object> GetS3Objects(this ICakeContext context, string prefix, S3Settings settings)
 {
     return context.CreateManager().GetObjects(prefix, settings);
 }
Exemple #48
0
        public static DateTimeOffset S3LastModified(this ICakeContext context, string key, string version, S3Settings settings)
        {
            S3Object result = context.CreateManager().GetObject(key, version, settings);

            if (result != null)
            {
                return(result.LastModified);
            }
            else
            {
                return(DateTime.MinValue);
            }
        }
Exemple #49
0
        public static string S3GetETag(this ICakeContext context, string key, string version, S3Settings settings)
        {
            S3Object result = context.CreateManager().GetObject(key, version, settings);

            if (result != null)
            {
                return result.ETag;
            }
            else
            {
                return "";
            }
        }
Exemple #50
0
 public static string S3GetHashTag(this ICakeContext context, string key, S3Settings settings)
 {
     return(context.S3GetHashTag(key, "", settings));
 }
Exemple #51
0
        //Directory
        private void SetWorkingDirectory(S3Settings settings)
        {
            DirectoryPath workingDirectory = settings.WorkingDirectory ?? _Environment.WorkingDirectory;

            settings.WorkingDirectory = workingDirectory.MakeAbsolute(_Environment);
        }
Exemple #52
0
 public static string GetPreSignedURL(this ICakeContext context, string key, string version, DateTime expires, S3Settings settings)
 {
     return(context.CreateManager().GetPreSignedURL(key, version, expires, settings));
 }
Exemple #53
0
 public static void S3Delete(this ICakeContext context, string key, S3Settings settings)
 {
     context.S3Delete(key, "", settings);
 }