Class: Fog::AWS::Storage::Real

Inherits:
Object
  • Object
show all
Extended by:
Deprecation
Includes:
Utils
Defined in:
lib/fog/storage/aws.rb,
lib/fog/storage/requests/aws/get_bucket.rb,
lib/fog/storage/requests/aws/get_object.rb,
lib/fog/storage/requests/aws/list_parts.rb,
lib/fog/storage/requests/aws/put_bucket.rb,
lib/fog/storage/requests/aws/put_object.rb,
lib/fog/storage/requests/aws/sync_clock.rb,
lib/fog/storage/requests/aws/copy_object.rb,
lib/fog/storage/requests/aws/get_service.rb,
lib/fog/storage/requests/aws/head_object.rb,
lib/fog/storage/requests/aws/upload_part.rb,
lib/fog/storage/requests/aws/delete_bucket.rb,
lib/fog/storage/requests/aws/delete_object.rb,
lib/fog/storage/requests/aws/get_bucket_acl.rb,
lib/fog/storage/requests/aws/get_object_acl.rb,
lib/fog/storage/requests/aws/get_object_url.rb,
lib/fog/storage/requests/aws/put_bucket_acl.rb,
lib/fog/storage/requests/aws/put_object_acl.rb,
lib/fog/storage/requests/aws/put_object_url.rb,
lib/fog/storage/requests/aws/get_bucket_logging.rb,
lib/fog/storage/requests/aws/get_object_torrent.rb,
lib/fog/storage/requests/aws/put_bucket_logging.rb,
lib/fog/storage/requests/aws/get_bucket_location.rb,
lib/fog/storage/requests/aws/get_request_payment.rb,
lib/fog/storage/requests/aws/put_request_payment.rb,
lib/fog/storage/requests/aws/get_bucket_versioning.rb,
lib/fog/storage/requests/aws/put_bucket_versioning.rb,
lib/fog/storage/requests/aws/abort_multipart_upload.rb,
lib/fog/storage/requests/aws/list_multipart_uploads.rb,
lib/fog/storage/requests/aws/complete_multipart_upload.rb,
lib/fog/storage/requests/aws/initiate_multipart_upload.rb,
lib/fog/storage/requests/aws/post_object_hidden_fields.rb,
lib/fog/storage/requests/aws/get_bucket_object_versions.rb

Instance Method Summary collapse

Methods included from Deprecation

deprecate, self_deprecate

Methods included from Utils

#cdn, #parse_data, #url

Constructor Details

#initialize(options = {}) ⇒ Real

Initialize connection to S3

Notes

options parameter must include values for :aws_access_key_id and :aws_secret_access_key in order to create a connection

Examples

s3 = S3.new(
  :aws_access_key_id => your_aws_access_key_id,
  :aws_secret_access_key => your_aws_secret_access_key
)

Parameters

  • options<~Hash> - config arguments for connection. Defaults to {}.

Returns

  • S3 object with connection to aws.



228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/fog/storage/aws.rb', line 228

def initialize(options={})
  unless options.delete(:provider)
    location = caller.first
    warning = "[yellow][WARN] Fog::AWS::Storage.new is deprecated, use Fog::Storage.new(:provider => 'AWS') instead[/]"
    warning << " [light_black](" << location << ")[/] "
    Formatador.display_line(warning)
  end
  require 'mime/types'
  @aws_access_key_id = options[:aws_access_key_id]
  @aws_secret_access_key = options[:aws_secret_access_key]
  @hmac = Fog::HMAC.new('sha1', @aws_secret_access_key)
  if @endpoint = options[:endpoint]
    endpoint = URI.parse(@endpoint)
    @host = endpoint.host
    @path = endpoint.path
    @port = endpoint.port
    @scheme = endpoint.scheme
  else
    options[:region] ||= 'us-east-1'
    @host = options[:host] || case options[:region]
    when 'eu-west-1'
      's3-eu-west-1.amazonaws.com'
    when 'us-east-1'
      's3.amazonaws.com'
    when 'ap-southeast-1'
      's3-ap-southeast-1.amazonaws.com'
    when 'us-west-1'
      's3-us-west-1.amazonaws.com'
    else
      raise ArgumentError, "Unknown region: #{options[:region].inspect}"
    end
    @path   = options[:path]      || '/'
    @port   = options[:port]      || 443
    @scheme = options[:scheme]    || 'https'
  end
  @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}#{@path}", options[:persistent] || true)
end

Instance Method Details

#abort_multipart_upload(bucket_name, object_name, upload_id) ⇒ Object

Abort a multipart upload

Parameters

  • bucket_name<~String> - Name of bucket to abort multipart upload on

  • object_name<~String> - Name of object to abort multipart upload on

  • upload_id<~String> - Id of upload to add part to

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadAbort.html



16
17
18
19
20
21
22
23
24
25
# File 'lib/fog/storage/requests/aws/abort_multipart_upload.rb', line 16

def abort_multipart_upload(bucket_name, object_name, upload_id)
  request({
    :expects    => 204,
    :headers    => {},
    :host       => "#{bucket_name}.#{@host}",
    :method     => 'DELETE',
    :path       => CGI.escape(object_name),
    :query      => {'uploadId' => upload_id}
  })
end

#complete_multipart_upload(bucket_name, object_name, upload_id, parts) ⇒ Object

Complete a multipart upload

Parameters

  • bucket_name<~String> - Name of bucket to complete multipart upload for

  • object_name<~String> - Name of object to complete multipart upload for

  • upload_id<~String> - Id of upload to add part to

  • parts<~Array>: Array of etags for parts

    • :etag<~String> - Etag for this part

Returns

  • response<~Excon::Response>:

    • headers<~Hash>:

      • ‘Bucket’<~String> - bucket of new object

      • ‘ETag’<~String> - etag of new object (will be needed to complete upload)

      • ‘Key’<~String> - key of new object

      • ‘Location’<~String> - location of new object

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadComplete.html



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/fog/storage/requests/aws/complete_multipart_upload.rb', line 28

def complete_multipart_upload(bucket_name, object_name, upload_id, parts)
  data = "<CompleteMultipartUpload>"
  parts.each_with_index do |part, index|
    data << "<Part>"
    data << "<PartNumber>#{index + 1}</PartNumber>"
    data << "<ETag>#{part}</ETag>"
    data << "</Part>"
  end
  data << "</CompleteMultipartUpload>"
  request({
    :body       => data,
    :expects    => 200,
    :headers    => { 'Content-Length' => data.length },
    :host       => "#{bucket_name}.#{@host}",
    :method     => 'POST',
    :parser     => Fog::Parsers::AWS::Storage::CompleteMultipartUpload.new,
    :path       => CGI.escape(object_name),
    :query      => {'uploadId' => upload_id}
  })
end

#copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {}) ⇒ Object

Copy an object from one S3 bucket to another

Parameters

  • source_bucket_name<~String> - Name of source bucket

  • source_object_name<~String> - Name of source object

  • target_bucket_name<~String> - Name of bucket to create copy in

  • target_object_name<~String> - Name for new copy of object

  • options<~Hash>:

    • ‘x-amz-metadata-directive’<~String> - Specifies whether to copy metadata from source or replace with data in request. Must be in [‘COPY’, ‘REPLACE’]

    • ‘x-amz-copy_source-if-match’<~String> - Copies object if its etag matches this value

    • ‘x-amz-copy_source-if-modified_since’<~Time> - Copies object it it has been modified since this time

    • ‘x-amz-copy_source-if-none-match’<~String> - Copies object if its etag does not match this value

    • ‘x-amz-copy_source-if-unmodified-since’<~Time> - Copies object it it has not been modified since this time

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘ETag’<~String> - etag of new object

      • ‘LastModified’<~Time> - date object was last modified

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectCOPY.html



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/fog/storage/requests/aws/copy_object.rb', line 31

def copy_object(source_bucket_name, source_object_name, target_bucket_name, target_object_name, options = {})
  headers = { 'x-amz-copy-source' => "/#{source_bucket_name}/#{source_object_name}" }.merge!(options)
  request({
    :expects  => 200,
    :headers  => headers,
    :host     => "#{target_bucket_name}.#{@host}",
    :method   => 'PUT',
    :parser   => Fog::Parsers::AWS::Storage::CopyObject.new,
    :path     => CGI.escape(target_object_name)
  })
end

#delete_bucket(bucket_name) ⇒ Object

Delete an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to delete

Returns

  • response<~Excon::Response>:

    • status<~Integer> - 204

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETE.html



18
19
20
21
22
23
24
25
# File 'lib/fog/storage/requests/aws/delete_bucket.rb', line 18

def delete_bucket(bucket_name)
  request({
    :expects  => 204,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :method   => 'DELETE'
  })
end

#delete_object(bucket_name, object_name) ⇒ Object

Delete an object from S3

Parameters

  • bucket_name<~String> - Name of bucket containing object to delete

  • object_name<~String> - Name of object to delete

Returns

  • response<~Excon::Response>:

    • status<~Integer> - 204

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectDELETE.html



19
20
21
22
23
24
25
26
27
28
# File 'lib/fog/storage/requests/aws/delete_object.rb', line 19

def delete_object(bucket_name, object_name)
  request({
    :expects    => 204,
    :headers    => {},
    :host       => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method     => 'DELETE',
    :path       => CGI.escape(object_name)
  })
end

#get_bucket(bucket_name, options = {}) ⇒ Object

List information about objects in an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to list object keys from

  • options<~Hash> - config arguments for list. Defaults to {}.

    • ‘delimiter’<~String> - causes keys with the same string between the prefix value and the first occurence of delimiter to be rolled up

    • ‘marker’<~String> - limits object keys to only those that appear lexicographically after its value.

    • ‘max-keys’<~Integer> - limits number of object keys returned

    • ‘prefix’<~String> - limits object keys to those beginning with its value.

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘Delimeter’<~String> - Delimiter specified for query

      • ‘IsTruncated’<~Boolean> - Whether or not the listing is truncated

      • ‘Marker’<~String> - Marker specified for query

      • ‘MaxKeys’<~Integer> - Maximum number of keys specified for query

      • ‘Name’<~String> - Name of the bucket

      • ‘Prefix’<~String> - Prefix specified for query

      • ‘CommonPrefixes’<~Array> - Array of strings for common prefixes

      • ‘Contents’<~Array>:

        • ‘ETag’<~String>: Etag of object

        • ‘Key’<~String>: Name of object

        • ‘LastModified’<~String>: Timestamp of last modification of object

        • ‘Owner’<~Hash>:

          • ‘DisplayName’<~String> - Display name of object owner

          • ‘ID’<~String> - Id of object owner

        • ‘Size’<~Integer> - Size of object

        • ‘StorageClass’<~String> - Storage class of object

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGET.html



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/fog/storage/requests/aws/get_bucket.rb', line 43

def get_bucket(bucket_name, options = {})
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  request({
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method   => 'GET',
    :parser   => Fog::Parsers::AWS::Storage::GetBucket.new,
    :query    => options
  })
end

#get_bucket_acl(bucket_name) ⇒ Object

Get access control list for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to get access control list for

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘AccessControlPolicy’<~Hash>

        • ‘Owner’<~Hash>:

          • ‘DisplayName’<~String> - Display name of object owner

          • ‘ID’<~String> - Id of object owner

        • ‘AccessControlList’<~Array>:

          • ‘Grant’<~Hash>:

            • ‘Grantee’<~Hash>:

              * 'DisplayName'<~String> - Display name of grantee
              * 'ID'<~String> - Id of grantee
              

              or

              * 'URI'<~String> - URI of group to grant access for
              
            • ‘Permission’<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETacl.html



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/fog/storage/requests/aws/get_bucket_acl.rb', line 32

def get_bucket_acl(bucket_name)
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  request({
    :expects    => 200,
    :headers    => {},
    :host       => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method     => 'GET',
    :parser     => Fog::Parsers::AWS::Storage::AccessControlList.new,
    :query      => {'acl' => nil}
  })
end

#get_bucket_location(bucket_name) ⇒ Object

Get location constraint for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to get location constraint for

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘LocationConstraint’<~String> - Location constraint of the bucket

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETlocation.html



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fog/storage/requests/aws/get_bucket_location.rb', line 21

def get_bucket_location(bucket_name)
  request({
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method   => 'GET',
    :parser   => Fog::Parsers::AWS::Storage::GetBucketLocation.new,
    :query    => {'location' => nil}
  })
end

#get_bucket_logging(bucket_name) ⇒ Object

Get logging status for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to get logging status for

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘BucketLoggingStatus’<~Hash>: (will be empty if logging is disabled)

        • ‘LoggingEnabled’<~Hash>:

          • ‘TargetBucket’<~String> - bucket where logs are stored

          • ‘TargetPrefix’<~String> - prefix logs are stored with

          • ‘TargetGrants’<~Array>:

            • ‘Grant’<~Hash>:

              • ‘Grantee’<~Hash>:

                * 'DisplayName'<~String> - Display name of grantee
                * 'ID'<~String> - Id of grantee
                

                or

                * 'URI'<~String> - URI of group to grant access for
                
              • ‘Permission’<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETlogging.html



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/fog/storage/requests/aws/get_bucket_logging.rb', line 32

def get_bucket_logging(bucket_name)
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  request({
    :expects    => 200,
    :headers    => {},
    :host       => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method     => 'GET',
    :parser     => Fog::Parsers::AWS::Storage::GetBucketLogging.new,
    :query      => {'logging' => nil}
  })
end

#get_bucket_object_versions(bucket_name, options = {}) ⇒ Object

List information about object versions in an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to list object keys from

  • options<~Hash> - config arguments for list. Defaults to {}.

    • ‘delimiter’<~String> - causes keys with the same string between the prefix value and the first occurence of delimiter to be rolled up

    • ‘key-marker’<~String> - limits object keys to only those that appear lexicographically after its value.

    • ‘max-keys’<~Integer> - limits number of object keys returned

    • ‘prefix’<~String> - limits object keys to those beginning with its value.

    • ‘version-id-marker’<~String> - limits object versions to only those that appear lexicographically after its value

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘Delimeter’<~String> - Delimiter specified for query

      • ‘KeyMarker’<~String> - Key marker specified for query

      • ‘MaxKeys’<~Integer> - Maximum number of keys specified for query

      • ‘Name’<~String> - Name of the bucket

      • ‘Prefix’<~String> - Prefix specified for query

      • ‘VersionIdMarker’<~String> - Version id marker specified for query

      • ‘IsTruncated’<~Boolean> - Whether or not this is the totality of the bucket

      • ‘Versions’<~Array>:

        * 'DeleteMarker'<~Hash>:
          * 'IsLatest'<~Boolean> - Whether or not this is the latest version
          * 'Key'<~String> - Name of object
          * 'LastModified'<~String>: Timestamp of last modification of object
          * 'Owner'<~Hash>:
            * 'DisplayName'<~String> - Display name of object owner
            * 'ID'<~String> - Id of object owner
          * 'VersionId'<~String> - The id of this version
        

        or

        * 'Version'<~Hash>:
          * 'ETag'<~String>: Etag of object
          * 'IsLatest'<~Boolean> - Whether or not this is the latest version
          * 'Key'<~String> - Name of object
          * 'LastModified'<~String>: Timestamp of last modification of object
          * 'Owner'<~Hash>:
            * 'DisplayName'<~String> - Display name of object owner
            * 'ID'<~String> - Id of object owner
          * 'Size'<~Integer> - Size of object
          * 'StorageClass'<~String> - Storage class of object
          * 'VersionId'<~String> - The id of this version
        

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETVersion.html



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/fog/storage/requests/aws/get_bucket_object_versions.rb', line 57

def get_bucket_object_versions(bucket_name, options = {})
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  request({
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method   => 'GET',
    :parser   => Fog::Parsers::AWS::Storage::GetBucketObjectVersions.new,
    :query    => {'versions' => nil}.merge!(options)
  })
end

#get_bucket_versioning(bucket_name) ⇒ Object

Get versioning status for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to get versioning status for

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘VersioningConfiguration’<~Hash>

        * Status<~String>: Versioning status in ['Enabled', 'Suspended', nil]
        

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETversioningStatus.html



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/fog/storage/requests/aws/get_bucket_versioning.rb', line 22

def get_bucket_versioning(bucket_name)
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  request({
    :expects    => 200,
    :headers    => {},
    :host       => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method     => 'GET',
    :parser     => Fog::Parsers::AWS::Storage::GetBucketVersioning.new,
    :query      => {'versioning' => nil}
  })
end

#get_object(bucket_name, object_name, options = {}, &block) ⇒ Object

Get an object from S3

Parameters

  • bucket_name<~String> - Name of bucket to read from

  • object_name<~String> - Name of object to read

  • options<~Hash>:

    • ‘If-Match’<~String> - Returns object only if its etag matches this value, otherwise returns 412 (Precondition Failed).

    • ‘If-Modified-Since’<~Time> - Returns object only if it has been modified since this time, otherwise returns 304 (Not Modified).

    • ‘If-None-Match’<~String> - Returns object only if its etag differs from this value, otherwise returns 304 (Not Modified)

    • ‘If-Unmodified-Since’<~Time> - Returns object only if it has not been modified since this time, otherwise returns 412 (Precodition Failed).

    • ‘Range’<~String> - Range of object to download

    • ‘versionId’<~String> - specify a particular version to retrieve

Returns

  • response<~Excon::Response>:

    • body<~String> - Contents of object

    • headers<~Hash>:

      • ‘Content-Length’<~String> - Size of object contents

      • ‘Content-Type’<~String> - MIME type of object

      • ‘ETag’<~String> - Etag of object

      • ‘Last-Modified’<~String> - Last modified timestamp for object

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/fog/storage/requests/aws/get_object.rb', line 31

def get_object(bucket_name, object_name, options = {}, &block)
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  unless object_name
    raise ArgumentError.new('object_name is required')
  end
  if version_id = options.delete('versionId')
    query = {'versionId' => version_id}
  end
  headers = {}
  headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
  headers['If-Unmodified-Since'] = options['If-Unmodified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
  headers.merge!(options)
  request({
    :expects  => 200,
    :headers  => headers,
    :host     => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method   => 'GET',
    :path     => CGI.escape(object_name),
    :query    => query
  }, &block)
end

#get_object_acl(bucket_name, object_name, options = {}) ⇒ Object

Get access control list for an S3 object

Parameters

  • bucket_name<~String> - name of bucket containing object

  • object_name<~String> - name of object to get access control list for

  • options<~Hash>:

    • ‘versionId’<~String> - specify a particular version to retrieve

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘AccessControlPolicy’<~Hash>

        • ‘Owner’<~Hash>:

          • ‘DisplayName’<~String> - Display name of object owner

          • ‘ID’<~String> - Id of object owner

        • ‘AccessControlList’<~Array>:

          • ‘Grant’<~Hash>:

            • ‘Grantee’<~Hash>:

              * 'DisplayName'<~String> - Display name of grantee
              * 'ID'<~String> - Id of grantee
              

              or

              * 'URI'<~String> - URI of group to grant access for
              
            • ‘Permission’<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGETacl.html



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/fog/storage/requests/aws/get_object_acl.rb', line 35

def get_object_acl(bucket_name, object_name, options = {})
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  unless object_name
    raise ArgumentError.new('object_name is required')
  end
  query = {'acl' => nil}
  if version_id = options.delete('versionId')
    query['versionId'] = version_id
  end
  request({
    :expects    => 200,
    :headers    => {},
    :host       => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method     => 'GET',
    :parser     => Fog::Parsers::AWS::Storage::AccessControlList.new,
    :path       => CGI.escape(object_name),
    :query      => query
  })
end

#get_object_torrent(bucket_name, object_name) ⇒ Object

Get torrent for an S3 object

Parameters

  • bucket_name<~String> - name of bucket containing object

  • object_name<~String> - name of object to get torrent for

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘AccessControlPolicy’<~Hash>

        • ‘Owner’<~Hash>:

          • ‘DisplayName’<~String> - Display name of object owner

          • ‘ID’<~String> - Id of object owner

        • ‘AccessControlList’<~Array>:

          • ‘Grant’<~Hash>:

            • ‘Grantee’<~Hash>:

              • ‘DisplayName’<~String> - Display name of grantee

              • ‘ID’<~String> - Id of grantee

            • ‘Permission’<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGETtorrent.html



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/fog/storage/requests/aws/get_object_torrent.rb', line 29

def get_object_torrent(bucket_name, object_name)
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  unless object_name
    raise ArgumentError.new('object_name is required')
  end
  request({
    :expects    => 200,
    :headers    => {},
    :host       => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method     => 'GET',
    :path       => CGI.escape(object_name),
    :query      => {'torrent' => nil}
  })
end

#get_object_url(bucket_name, object_name, expires) ⇒ Object

Get an expiring object url from S3

Parameters

  • bucket_name<~String> - Name of bucket containing object

  • object_name<~String> - Name of object to get expiring url for

  • expires<~Time> - An expiry time for this url

Returns

  • response<~Excon::Response>:

    • body<~String> - url for object

See Also

docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fog/storage/requests/aws/get_object_url.rb', line 20

def get_object_url(bucket_name, object_name, expires)
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  unless object_name
    raise ArgumentError.new('object_name is required')
  end
  url({
    :headers  => {},
    :host     => @host,
    :method   => 'GET',
    :path     => "#{bucket_name}/#{object_name}"
  }, expires)
end

#get_request_payment(bucket_name) ⇒ Object

Get configured payer for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to get payer for

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘Payer’<~String> - Specifies who pays for download and requests

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTrequestPaymentGET.html



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fog/storage/requests/aws/get_request_payment.rb', line 21

def get_request_payment(bucket_name)
  request({
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method   => 'GET',
    :parser   => Fog::Parsers::AWS::Storage::GetRequestPayment.new,
    :query    => {'requestPayment' => nil}
  })
end

#get_serviceObject

List information about S3 buckets for authorized user

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘Buckets’<~Hash>:

        • ‘Name’<~String> - Name of bucket

        • ‘CreationTime’<~Time> - Timestamp of bucket creation

      • ‘Owner’<~Hash>:

        • ‘DisplayName’<~String> - Display name of bucket owner

        • ‘ID’<~String> - Id of bucket owner

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTServiceGET.html



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fog/storage/requests/aws/get_service.rb', line 23

def get_service
  request({
    :expects  => 200,
    :headers  => {},
    :host     => @host,
    :idempotent => true,
    :method   => 'GET',
    :parser   => Fog::Parsers::AWS::Storage::GetService.new,
    :url      => @host
  })
end

#head_object(bucket_name, object_name, options = {}) ⇒ Object

Get headers for an object from S3

Parameters

  • bucket_name<~String> - Name of bucket to read from

  • object_name<~String> - Name of object to read

  • options<~Hash>:

    • ‘If-Match’<~String> - Returns object only if its etag matches this value, otherwise returns 412 (Precondition Failed).

    • ‘If-Modified-Since’<~Time> - Returns object only if it has been modified since this time, otherwise returns 304 (Not Modified).

    • ‘If-None-Match’<~String> - Returns object only if its etag differs from this value, otherwise returns 304 (Not Modified)

    • ‘If-Unmodified-Since’<~Time> - Returns object only if it has not been modified since this time, otherwise returns 412 (Precodition Failed).

    • ‘Range’<~String> - Range of object to download

    • ‘versionId’<~String> - specify a particular version to retrieve

Returns

  • response<~Excon::Response>:

    • body<~String> - Contents of object

    • headers<~Hash>:

      • ‘Content-Length’<~String> - Size of object contents

      • ‘Content-Type’<~String> - MIME type of object

      • ‘ETag’<~String> - Etag of object

      • ‘Last-Modified’<~String> - Last modified timestamp for object

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectHEAD.html



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/fog/storage/requests/aws/head_object.rb', line 31

def head_object(bucket_name, object_name, options={})
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  unless object_name
    raise ArgumentError.new('object_name is required')
  end
  if version_id = options.delete('versionId')
    query = {'versionId' => version_id}
  end
  headers = {}
  headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
  headers['If-Unmodified-Since'] = options['If-Unmodified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']
  headers.merge!(options)
  request({
    :expects  => 200,
    :headers  => headers,
    :host     => "#{bucket_name}.#{@host}",
    :method   => 'HEAD',
    :path     => CGI.escape(object_name),
    :query    => query
  })
end

#initiate_multipart_upload(bucket_name, object_name, options = {}) ⇒ Object

Initiate a multipart upload to an S3 bucket

Parameters

  • bucket_name<~String> - Name of bucket to create object in

  • object_name<~String> - Name of object to create

  • options<~Hash>:

    • ‘Cache-Control’<~String> - Caching behaviour

    • ‘Content-Disposition’<~String> - Presentational information for the object

    • ‘Content-Encoding’<~String> - Encoding of object data

    • ‘Content-MD5’<~String> - Base64 encoded 128-bit MD5 digest of message (defaults to Base64 encoded MD5 of object.read)

    • ‘Content-Type’<~String> - Standard MIME type describing contents (defaults to MIME::Types.of.first)

    • ‘x-amz-acl’<~String> - Permissions, must be in [‘private’, ‘public-read’, ‘public-read-write’, ‘authenticated-read’]

    • “x-amz-meta-#name” - Headers to be returned with object, note total size of request without body must be less than 8 KB.

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘Bucket’<~String> - Bucket where upload was initiated

      • ‘Key’<~String> - Object key where the upload was initiated

      • ‘UploadId’<~String> - Id for initiated multipart upload

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadInitiate.html



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fog/storage/requests/aws/initiate_multipart_upload.rb', line 32

def initiate_multipart_upload(bucket_name, object_name, options = {})
  request({
    :expects    => 200,
    :headers    => options,
    :host       => "#{bucket_name}.#{@host}",
    :method     => 'POST',
    :parser     => Fog::Parsers::AWS::Storage::InitiateMultipartUpload.new,
    :path       => CGI.escape(object_name),
    :query      => {'uploads' => nil}
  })
end

#list_multipart_uploads(bucket_name, options = {}) ⇒ Object

List multipart uploads for a bucket

Parameters

  • bucket_name<~String> - Name of bucket to list multipart uploads for

  • upload_id<~String> - upload id to list objects for

  • options<~Hash> - config arguments for list. Defaults to {}.

    • ‘key-marker’<~String> - limits parts to only those that appear lexicographically after this key.

    • ‘max-uploads’<~Integer> - limits number of uploads returned

    • ‘upload-id-marker’<~String> - limits uploads to only those that appear lexicographically after this upload id.

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘Bucket’<~string> - Bucket where the multipart upload was initiated

      • ‘IsTruncated’<~Boolean> - Whether or not the listing is truncated

      • ‘KeyMarker’<~String> - first key in list, only upload ids after this lexographically will appear

      • ‘MaxUploads’<~Integer> - Maximum results to return

      • ‘NextKeyMarker’<~String> - last key in list, for further pagination

      • ‘NextUploadIdMarker’<~String> - last key in list, for further pagination

      • ‘Upload’<~Hash>:

        • ‘Initiated’<~Time> - Time when upload was initiated

        • ‘Initiator’<~Hash>:

          • ‘DisplayName’<~String> - Display name of upload initiator

          • ‘ID’<~String> - Id of upload initiator

        • ‘Key’<~String> - Key where multipart upload was initiated

        • ‘Owner’<~Hash>:

          • ‘DisplayName’<~String> - Display name of upload owner

          • ‘ID’<~String> - Id of upload owner

        • ‘StorageClass’<~String> - Storage class of object

        • ‘UploadId’<~String> - upload id of upload containing part

      • ‘UploadIdMarker’<String> - first key in list, only upload ids after this lexographically will appear

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadListMPUpload.html



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/fog/storage/requests/aws/list_multipart_uploads.rb', line 45

def list_multipart_uploads(bucket_name, options = {})
  request({
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method   => 'GET',
    :parser   => Fog::Parsers::AWS::Storage::ListMultipartUploads.new,
    :query    => options.merge!({'uploads' => nil})
  })
end

#list_parts(bucket_name, object_name, upload_id, options = {}) ⇒ Object

List parts for a multipart upload

Parameters

  • bucket_name<~String> - Name of bucket to list parts for

  • object_name<~String> - Name of object to list parts for

  • upload_id<~String> - upload id to list objects for

  • options<~Hash> - config arguments for list. Defaults to {}.

    • ‘max-parts’<~Integer> - limits number of parts returned

    • ‘part-number-marker’<~String> - limits parts to only those that appear lexicographically after this part number.

Returns

  • response<~Excon::Response>:

    • body<~Hash>:

      • ‘Bucket’<~string> - Bucket where the multipart upload was initiated

      • ‘Initiator’<~Hash>:

        • ‘DisplayName’<~String> - Display name of upload initiator

        • ‘ID’<~String> - Id of upload initiator

      • ‘IsTruncated’<~Boolean> - Whether or not the listing is truncated

      • ‘Key’<~String> - Key where multipart upload was initiated

      • ‘MaxParts’<~String> - maximum number of replies alllowed in response

      • ‘NextPartNumberMarker’<~String> - last item in list, for further pagination

      • ‘Part’<~Array>:

        • ‘ETag’<~String> - ETag of part

        • ‘LastModified’<~Timestamp> - Last modified for part

        • ‘PartNumber’<~String> - Part number for part

        • ‘Size’<~Integer> - Size of part

      • ‘PartNumberMarker’<~String> - Part number after which listing begins

      • ‘StorageClass’<~String> - Storage class of object

      • ‘UploadId’<~String> - upload id of upload containing part

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadListParts.html



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/fog/storage/requests/aws/list_parts.rb', line 42

def list_parts(bucket_name, object_name, upload_id, options = {})
  options['uploadId'] = upload_id
  request({
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method   => 'GET',
    :parser   => Fog::Parsers::AWS::Storage::ListParts.new,
    :path     => CGI.escape(object_name),
    :query    => options.merge!({'uploadId' => upload_id})
  })
end

#post_object_hidden_fields(options = {}) ⇒ Object

Get a hash of hidden fields for form uploading to S3, in the form => :field_value Form should look like: <form action=“http://#bucket_name.s3.amazonaws.com/” method=“post” enctype=“multipart/form-data”> These hidden fields should then appear, followed by a field named ‘file’ which is either a textarea or file input.

Parameters

  • options<~Hash>:

    • acl<~String> - access control list, in [‘private’, ‘public-read’, ‘public-read-write’, ‘authenticated-read’, ‘bucket-owner-read’, ‘bucket-owner-full-control’]

    • Cache-Control - same as REST header

    • Content-Type - same as REST header

    • Content-Disposition - same as REST header

    • Content-Encoding - same as REST header

    • Expires - same as REST header

    • key - key for object, set to ‘$filename’ to use filename provided by user

    • policy - security policy for upload

    • success_action_redirect - url to redirct to upon success

    • success_action_status - status code to return on success, in [200, 201, 204]

    • x-amz-security-token - devpay security token

    • x-amz-meta-… - meta data tags

See Also

docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTForms.html



28
29
30
31
32
33
34
35
36
37
# File 'lib/fog/storage/requests/aws/post_object_hidden_fields.rb', line 28

def post_object_hidden_fields(options = {})
  if options['policy']
    options['policy'] = options['policy'].to_json
    options['AWSAccessKeyId'] = @aws_access_key_id
    string_to_sign = Base64.encode64(options['policy']).chomp!
    signed_string = @hmac.sign(string_to_sign)
    options['Signature'] = Base64.encode64(signed_string).chomp!
  end
  options
end

#put_bucket(bucket_name, options = {}) ⇒ Object

Create an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to create

  • options<~Hash> - config arguments for bucket. Defaults to {}.

    • ‘LocationConstraint’<~Symbol> - sets the location for the bucket

    • ‘x-amz-acl’<~String> - Permissions, must be in [‘private’, ‘public-read’, ‘public-read-write’, ‘authenticated-read’]

Returns

  • response<~Excon::Response>:

    • status<~Integer> - 200

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUT.html



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/fog/storage/requests/aws/put_bucket.rb', line 21

def put_bucket(bucket_name, options = {})
  if location_constraint = options.delete('LocationConstraint')
    data =
<<-DATA
  <CreateBucketConfiguration>
    <LocationConstraint>#{location_constraint}</LocationConstraint>
  </CreateBucketConfiguration>
DATA
  else
    data = nil
  end
  request({
    :expects    => 200,
    :body       => data,
    :headers    => options,
    :idempotent => true,
    :host       => "#{bucket_name}.#{@host}",
    :method     => 'PUT'
  })
end

#put_bucket_acl(bucket_name, acl) ⇒ Object

Change access control list for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to modify

  • acl<~Hash>:

    • Owner<~Hash>:

      • ID<~String>: id of owner

      • DisplayName<~String>: display name of owner

    • AccessControlList<~Array>:

      • Grantee<~Hash>:

        * 'DisplayName'<~String> - Display name of grantee
        * 'ID'<~String> - Id of grantee
        

        or

        * 'EmailAddress'<~String> - Email address of grantee
        

        or

        * 'URI'<~String> - URI of group to grant access for
        
      • Permission<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTacl.html



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/fog/storage/requests/aws/put_bucket_acl.rb', line 27

def put_bucket_acl(bucket_name, acl)
  data =
<<-DATA
<AccessControlPolicy>
  <Owner>
    <ID>#{acl['Owner']['ID']}</ID>
    <DisplayName>#{acl['Owner']['DisplayName']}</DisplayName>
  </Owner>
  <AccessControlList>
DATA

  acl['AccessControlList'].each do |grant|
    data << "    <Grant>"
    type = case grant['Grantee'].keys.sort
    when ['DisplayName', 'ID']
      'CanonicalUser'
    when ['EmailAddress']
      'AmazonCustomerByEmail'
    when ['URI']
      'Group'
    end
    data << "      <Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"#{type}\">"
    for key, value in grant['Grantee']
      data << "        <#{key}>#{value}</#{key}>"
    end
    data << "      </Grantee>"
    data << "      <Permission>#{grant['Permission']}</Permission>"
    data << "    </Grant>"
  end

  data <<
<<-DATA
  </AccessControlList>
</AccessControlPolicy>
DATA

  request({
    :body     => data,
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :method   => 'PUT',
    :query    => {'acl' => nil}
  })
end

#put_bucket_logging(bucket_name, logging_status) ⇒ Object

Change logging status for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to modify

  • logging_status<~Hash>:

    • Owner<~Hash>:

      • ID<~String>: id of owner

      • DisplayName<~String>: display name of owner

    • AccessControlList<~Array>:

      • Grantee<~Hash>:

        * 'DisplayName'<~String> - Display name of grantee
        * 'ID'<~String> - Id of grantee
        

        or

        * 'EmailAddress'<~String> - Email address of grantee
        

        or

        * 'URI'<~String> - URI of group to grant access for
        
      • Permission<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTlogging.html



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/fog/storage/requests/aws/put_bucket_logging.rb', line 27

def put_bucket_logging(bucket_name, logging_status)
  if logging_status['LoggingEnabled'].empty?
    data =
<<-DATA
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01" />
DATA
  else
    data =
<<-DATA
<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
  <LoggingEnabled>
    <TargetBucket>#{logging_status['LoggingEnabled']['TargetBucket']}</TargetBucket>
    <TargetPrefix>#{logging_status['LoggingEnabled']['TargetBucket']}</TargetPrefix>
    <TargetGrants>
DATA

    acl['AccessControlList'].each do |grant|
      data << "      <Grant>"
      type = case grant['Grantee'].keys.sort
      when ['DisplayName', 'ID']
        'CanonicalUser'
      when ['EmailAddress']
        'AmazonCustomerByEmail'
      when ['URI']
        'Group'
      end
      data << "        <Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"#{type}\">"
      for key, value in grant['Grantee']
        data << "          <#{key}>#{value}</#{key}>"
      end
      data << "        </Grantee>"
      data << "        <Permission>#{grant['Permission']}</Permission>"
      data << "      </Grant>"
    end

    data <<
<<-DATA
    </TargetGrants>
  </LoggingEnabled>
</BucketLoggingStatus>
DATA
  end

  request({
    :body     => data,
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :method   => 'PUT',
    :query    => {'logging' => nil}
  })
end

#put_bucket_versioning(bucket_name, status) ⇒ Object

Change versioning status for an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to modify

  • status<~String> - Status to change to in [‘Enabled’, ‘Suspended’]

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fog/storage/requests/aws/put_bucket_versioning.rb', line 15

def put_bucket_versioning(bucket_name, status)
  data =
<<-DATA
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Status>#{status}</Status>
</VersioningConfiguration>
DATA

  request({
    :body     => data,
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :method   => 'PUT',
    :query    => {'versioning' => nil}
  })
end

#put_object(bucket_name, object_name, data, options = {}) ⇒ Object

Create an object in an S3 bucket

Parameters

  • bucket_name<~String> - Name of bucket to create object in

  • object_name<~String> - Name of object to create

  • data<~File||String> - File or String to create object from

  • options<~Hash>:

    • ‘Cache-Control’<~String> - Caching behaviour

    • ‘Content-Disposition’<~String> - Presentational information for the object

    • ‘Content-Encoding’<~String> - Encoding of object data

    • ‘Content-Length’<~String> - Size of object in bytes (defaults to object.read.length)

    • ‘Content-MD5’<~String> - Base64 encoded 128-bit MD5 digest of message

    • ‘Content-Type’<~String> - Standard MIME type describing contents (defaults to MIME::Types.of.first)

    • ‘Expires’<~String> - Cache expiry

    • ‘x-amz-acl’<~String> - Permissions, must be in [‘private’, ‘public-read’, ‘public-read-write’, ‘authenticated-read’]

    • “x-amz-meta-#name” - Headers to be returned with object, note total size of request without body must be less than 8 KB.

Returns

  • response<~Excon::Response>:

    • headers<~Hash>:

      • ‘ETag’<~String> - etag of new object

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUT.html



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/fog/storage/requests/aws/put_object.rb', line 31

def put_object(bucket_name, object_name, data, options = {})
  data = parse_data(data)
  headers = data[:headers].merge!(options)
  request({
    :body       => data[:body],
    :expects    => 200,
    :headers    => headers,
    :host       => "#{bucket_name}.#{@host}",
    :idempotent => true,
    :method     => 'PUT',
    :path       => CGI.escape(object_name)
  })
end

#put_object_acl(bucket_name, object_name, acl, options = {}) ⇒ Object

Change access control list for an S3 object

Parameters

  • bucket_name<~String> - name of bucket to modify

  • object_name<~String> - name of object to get access control list for

  • acl<~Hash>:

    • Owner<~Hash>:

      • ID<~String>: id of owner

      • DisplayName<~String>: display name of owner

    • AccessControlList<~Array>:

      • Grantee<~Hash>:

        * 'DisplayName'<~String> - Display name of grantee
        * 'ID'<~String> - Id of grantee
        

        or

        * 'EmailAddress'<~String> - Email address of grantee
        

        or

        * 'URI'<~String> - URI of group to grant access for
        
      • Permission<~String> - Permission, in [FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP]

  • options<~Hash>:

    • ‘versionId’<~String> - specify a particular version to retrieve

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUTacl.html



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/fog/storage/requests/aws/put_object_acl.rb', line 30

def put_object_acl(bucket_name, object_name, acl, options = {})
  query = {'acl' => nil}
  if version_id = options.delete('versionId')
    query['versionId'] = version_id
  end

  data =
<<-DATA
<AccessControlPolicy>
  <Owner>
    <ID>#{acl['Owner']['ID']}</ID>
    <DisplayName>#{acl['Owner']['DisplayName']}</DisplayName>
  </Owner>
  <AccessControlList>
DATA

  acl['AccessControlList'].each do |grant|
    data << "    <Grant>"
    type = case grant['Grantee'].keys.sort
    when ['DisplayName', 'ID']
      'CanonicalUser'
    when ['EmailAddress']
      'AmazonCustomerByEmail'
    when ['URI']
      'Group'
    end
    data << "      <Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"#{type}\">"
    for key, value in grant['Grantee']
      data << "        <#{key}>#{value}</#{key}>"
    end
    data << "      </Grantee>"
    data << "      <Permission>#{grant['Permission']}</Permission>"
    data << "    </Grant>"
  end

  data <<
<<-DATA
  </AccessControlList>
</AccessControlPolicy>
DATA

  request({
    :body     => data,
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :method   => 'PUT',
    :path       => CGI.escape(object_name),
    :query    => query
  })
end

#put_object_url(bucket_name, object_name, expires) ⇒ Object

Get an expiring object url from S3 for putting an object

Parameters

  • bucket_name<~String> - Name of bucket containing object

  • object_name<~String> - Name of object to get expiring url for

  • expires<~Time> - An expiry time for this url

Returns

  • response<~Excon::Response>:

    • body<~String> - url for object

See Also

docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fog/storage/requests/aws/put_object_url.rb', line 20

def put_object_url(bucket_name, object_name, expires)
  unless bucket_name
    raise ArgumentError.new('bucket_name is required')
  end
  unless object_name
    raise ArgumentError.new('object_name is required')
  end
  url({
    :headers  => {},
    :host     => @host,
    :method   => 'PUT',
    :path     => "#{bucket_name}/#{object_name}"
  }, expires)
end

#put_request_payment(bucket_name, payer) ⇒ Object

Change who pays for requests to an S3 bucket

Parameters

  • bucket_name<~String> - name of bucket to modify

  • payer<~String> - valid values are BucketOwner or Requester

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/RESTrequestPaymentPUT.html



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/fog/storage/requests/aws/put_request_payment.rb', line 15

def put_request_payment(bucket_name, payer)
  data =
<<-DATA
<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Payer>#{payer}</Payer>
</RequestPaymentConfiguration>
DATA
  request({
    :body     => data,
    :expects  => 200,
    :headers  => {},
    :host     => "#{bucket_name}.#{@host}",
    :method   => 'PUT',
    :query    => {'requestPayment' => nil}
  })
end

#reloadObject



266
267
268
# File 'lib/fog/storage/aws.rb', line 266

def reload
  @connection.reset
end

#sync_clockObject

Sync clock against S3 to avoid skew errors



8
9
10
11
12
13
14
15
# File 'lib/fog/storage/requests/aws/sync_clock.rb', line 8

def sync_clock
  response = begin
    get_service
  rescue => error
    error.response
  end
  Fog::Time.now = Time.parse(response.headers['Date'])
end

#upload_part(bucket_name, object_name, upload_id, part_number, data, options = {}) ⇒ Object

Upload a part for a multipart upload

Parameters

  • bucket_name<~String> - Name of bucket to add part to

  • object_name<~String> - Name of object to add part to

  • upload_id<~String> - Id of upload to add part to

  • part_number<~String> - Index of part in upload

  • data<~File||String> - Content for part

  • options<~Hash>:

    • ‘Content-MD5’<~String> - Base64 encoded 128-bit MD5 digest of message

Returns

  • response<~Excon::Response>:

    • headers<~Hash>:

      • ‘ETag’<~String> - etag of new object (will be needed to complete upload)

See Also

docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadUploadPart.html



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fog/storage/requests/aws/upload_part.rb', line 25

def upload_part(bucket_name, object_name, upload_id, part_number, data, options = {})
  data = parse_data(data)
  headers = options
  headers['Content-Length'] = data[:headers]['Content-Length']
  request({
    :body       => data[:body],
    :expects    => 200,
    :headers    => headers,
    :host       => "#{bucket_name}.#{@host}",
    :method     => 'PUT',
    :path       => CGI.escape(object_name),
    :query      => {'uploadId' => upload_id, 'partNumber' => part_number}
  })
end