Class: Aws::S3::Object

Inherits:
Object
  • Object
show all
Defined in:
gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb,
gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb

Defined Under Namespace

Classes: Collection

Read-Only Attributes collapse

Actions collapse

Associations collapse

Instance Method Summary collapse

Constructor Details

#initialize(bucket_name, key, options = {}) ⇒ Object #initialize(options = {}) ⇒ Object

Returns a new instance of Object.

Overloads:

  • #initialize(bucket_name, key, options = {}) ⇒ Object

    Parameters:

    • bucket_name (String)
    • key (String)

    Options Hash (options):

  • #initialize(options = {}) ⇒ Object

    Options Hash (options):

    • :bucket_name (required, String)
    • :key (required, String)
    • :client (Client)


24
25
26
27
28
29
30
31
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 24

def initialize(*args)
  options = Hash === args.last ? args.pop.dup : {}
  @bucket_name = extract_bucket_name(args, options)
  @key = extract_key(args, options)
  @data = options.delete(:data)
  @client = options.delete(:client) || Client.new(options)
  @waiter_block_warned = false
end

Instance Method Details

#accept_rangesString

Indicates that a range of bytes was specified.

Returns:

  • (String)


59
60
61
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 59

def accept_ranges
  data[:accept_ranges]
end

#aclObjectAcl

Returns:



2948
2949
2950
2951
2952
2953
2954
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2948

def acl
  ObjectAcl.new(
    bucket_name: @bucket_name,
    object_key: @key,
    client: @client
  )
end

#archive_statusString

The archive state of the head object.

This functionality is not supported for directory buckets.

Returns:

  • (String)


119
120
121
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 119

def archive_status
  data[:archive_status]
end

#bucketBucket

Returns:



2957
2958
2959
2960
2961
2962
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2957

def bucket
  Bucket.new(
    name: @bucket_name,
    client: @client
  )
end

#bucket_key_enabledBoolean

Indicates whether the object uses an S3 Bucket Key for server-side encryption with Key Management Service (KMS) keys (SSE-KMS).

This functionality is not supported for directory buckets.

Returns:

  • (Boolean)


351
352
353
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 351

def bucket_key_enabled
  data[:bucket_key_enabled]
end

#bucket_nameString

Returns:

  • (String)


36
37
38
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 36

def bucket_name
  @bucket_name
end

#cache_controlString

Specifies caching behavior along the request/reply chain.

Returns:

  • (String)


236
237
238
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 236

def cache_control
  data[:cache_control]
end

#checksum_crc32String

The base64-encoded, 32-bit CRC32 checksum of the object. This will only be present if it was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see Checking object integrity in the Amazon S3 User Guide.

Returns:

  • (String)


148
149
150
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 148

def checksum_crc32
  data[:checksum_crc32]
end

#checksum_crc32cString

The base64-encoded, 32-bit CRC32C checksum of the object. This will only be present if it was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see Checking object integrity in the Amazon S3 User Guide.

Returns:

  • (String)


165
166
167
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 165

def checksum_crc32c
  data[:checksum_crc32c]
end

#checksum_sha1String

The base64-encoded, 160-bit SHA-1 digest of the object. This will only be present if it was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see Checking object integrity in the Amazon S3 User Guide.

Returns:

  • (String)


182
183
184
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 182

def checksum_sha1
  data[:checksum_sha1]
end

#checksum_sha256String

The base64-encoded, 256-bit SHA-256 digest of the object. This will only be present if it was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see Checking object integrity in the Amazon S3 User Guide.

Returns:

  • (String)


199
200
201
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 199

def checksum_sha256
  data[:checksum_sha256]
end

#clientClient

Returns:



492
493
494
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 492

def client
  @client
end

#content_dispositionString

Specifies presentational information for the object.

Returns:

  • (String)


242
243
244
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 242

def content_disposition
  data[:content_disposition]
end

#content_encodingString

Indicates what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.

Returns:

  • (String)


250
251
252
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 250

def content_encoding
  data[:content_encoding]
end

#content_languageString

The language the content is in.

Returns:

  • (String)


256
257
258
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 256

def content_language
  data[:content_language]
end

#content_lengthInteger Also known as: size

Size of the body in bytes.

Returns:

  • (Integer)


131
132
133
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 131

def content_length
  data[:content_length]
end

#content_typeString

A standard MIME type describing the format of the object data.

Returns:

  • (String)


262
263
264
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 262

def content_type
  data[:content_type]
end

#copy_from(source, options = {}) ⇒ Object

Copies another object to this object. Use multipart_copy: true for large objects. This is required for objects that exceed 5GB.

Examples:

Basic object copy


bucket = Aws::S3::Bucket.new('target-bucket')
object = bucket.object('target-key')

# source as String
object.copy_from('source-bucket/source-key')

# source as Hash
object.copy_from(bucket:'source-bucket', key:'source-key')

# source as Aws::S3::Object
object.copy_from(bucket.object('source-key'))

Managed copy of large objects


# uses multipart upload APIs to copy object
object.copy_from('src-bucket/src-key', multipart_copy: true)

Parameters:

Options Hash (options):

  • :multipart_copy (Boolean) — default: false

    When true, the object will be copied using the multipart APIs. This is necessary for objects larger than 5GB and can provide performance improvements on large objects. Amazon S3 does not accept multipart copies for objects smaller than 5MB. Object metadata such as Content-Type will be copied, however, Checksums are not copied.

  • :content_length (Integer)

    Only used when :multipart_copy is true. Passing this options avoids a HEAD request to query the source object size but prevents object metadata from being copied. Raises an ArgumentError if this option is provided when :multipart_copy is false or not set.

  • :copy_source_client (S3::Client)

    Only used when :multipart_copy is true and the source object is in a different region. You do not need to specify this option if you have provided :content_length.

  • :copy_source_region (String)

    Only used when :multipart_copy is true and the source object is in a different region. You do not need to specify this option if you have provided a :source_client or a :content_length.

  • :use_source_parts (Boolean) — default: false

    Only used when :multipart_copy is true. Use part sizes defined on the source object if any exist. If copying or moving an object that is already multipart, this does not re-part the object, instead re-using the part definitions on the original. That means the etag and any checksums will not change. This is especially useful if the source object has parts with varied sizes.

See Also:



1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 1344

def copy_from(options = {})
  options = options.merge(
    bucket: @bucket_name,
    key: @key
  )
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.copy_object(options)
  end
  resp.data
end

#copy_to(target, options = {}) ⇒ Object

Note:

If you need to copy to a bucket in a different region, use #copy_from.

Copies this object to another object. Use multipart_copy: true for large objects. This is required for objects that exceed 5GB.

Examples:

Basic object copy


bucket = Aws::S3::Bucket.new('source-bucket')
object = bucket.object('source-key')

# target as String
object.copy_to('target-bucket/target-key')

# target as Hash
object.copy_to(bucket: 'target-bucket', key: 'target-key')

# target as Aws::S3::Object
object.copy_to(bucket.object('target-key'))

Managed copy of large objects


# uses multipart upload APIs to copy object
object.copy_to('src-bucket/src-key', multipart_copy: true)

Parameters:

  • target (S3::Object, String, Hash)

    Where to copy the object data to. target must be one of the following:

    • Aws::S3::Object
    • Hash - with :bucket and :key
    • String - formatted like "target-bucket-name/target-key"


121
122
123
124
125
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 121

def copy_to(target, options = {})
  Aws::Plugins::UserAgent.feature('resource') do
    ObjectCopier.new(self, options).copy_to(target, options)
  end
end

#dataTypes::HeadObjectOutput

Returns the data for this Aws::S3::Object. Calls Client#head_object if #data_loaded? is false.

Returns:



517
518
519
520
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 517

def data
  load unless @data
  @data
end

#data_loaded?Boolean

Returns true if this resource is loaded. Accessing attributes or #data on an unloaded resource will trigger a call to #load.

Returns:

  • (Boolean)

    Returns true if this resource is loaded. Accessing attributes or #data on an unloaded resource will trigger a call to #load.



525
526
527
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 525

def data_loaded?
  !!@data
end

#delete(options = {}) ⇒ Types::DeleteObjectOutput

Examples:

Request syntax with placeholder values


object.delete({
  mfa: "MFA",
  version_id: "ObjectVersionId",
  request_payer: "requester", # accepts requester
  bypass_governance_retention: false,
  expected_bucket_owner: "AccountId",
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :mfa (String)

    The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device. Required to permanently delete a versioned object if versioning is configured with MFA delete enabled.

    This functionality is not supported for directory buckets.

  • :version_id (String)

    Version ID used to reference a specific version of the object.

    For directory buckets in this API operation, only the null value of the version ID is supported.

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see Downloading Objects in Requester Pays Buckets in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :bypass_governance_retention (Boolean)

    Indicates whether S3 Object Lock should bypass Governance-mode restrictions to process this operation. To use this header, you must have the s3:BypassGovernanceRetention permission.

    This functionality is not supported for directory buckets.

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code 403 Forbidden (access denied).

Returns:



1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 1410

def delete(options = {})
  options = options.merge(
    bucket: @bucket_name,
    key: @key
  )
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.delete_object(options)
  end
  resp.data
end

#delete_markerBoolean

Specifies whether the object retrieved was (true) or was not (false) a Delete Marker. If false, this response header does not appear in the response.

This functionality is not supported for directory buckets.

Returns:

  • (Boolean)


53
54
55
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 53

def delete_marker
  data[:delete_marker]
end

#download_file(destination, options = {}) ⇒ Boolean

Downloads a file in S3 to a path on disk.

# small files (< 5MB) are downloaded in a single API call
obj.download_file('/path/to/file')

Files larger than 5MB are downloaded using multipart method

# large files are split into parts
# and the parts are downloaded in parallel
obj.download_file('/path/to/very_large_file')

You can provide a callback to monitor progress of the download:

# bytes and part_sizes are each an array with 1 entry per part
# part_sizes may not be known until the first bytes are retrieved
progress = Proc.new do |bytes, part_sizes, file_size|
  puts bytes.map.with_index { |b, i| "Part #{i+1}: #{b} / #{part_sizes[i]}"}.join(' ') + "Total: #{100.0 * bytes.sum / file_size}%" }
end
obj.download_file('/path/to/file', progress_callback: progress)

Parameters:

  • destination (String)

    Where to download the file to.

  • options (Hash) (defaults to: {})

    Additional options for Client#get_object and #Client#head_object may be provided.

Options Hash (options):

  • mode (String)

    auto, single_request, get_range single_request mode forces only 1 GET request is made in download, get_range mode allows chunk_size parameter to configured in customizing each range size in multipart_download, By default, auto mode is enabled, which performs multipart_download

  • chunk_size (Integer)

    required in get_range mode.

  • thread_count (Integer) — default: 10

    Customize threads used in the multipart download.

  • version_id (String)

    The object version id used to retrieve the object. For more about object versioning, see: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html

  • checksum_mode (String) — default: ENABLED

    When ENABLED and the object has a stored checksum, it will be used to validate the download and will raise an Aws::Errors::ChecksumError if checksum validation fails. You may provide a on_checksum_validated callback if you need to verify that validation occurred and which algorithm was used. To disable checksum validation, set checksum_mode to "DISABLED".

  • on_checksum_validated (Callable)

    Called each time a request's checksum is validated with the checksum algorithm and the response. For multipart downloads, this will be called for each part that is downloaded and validated.

  • :progress_callback (Proc)

    A Proc that will be called when each chunk of the download is received. It will be invoked with [bytes_read], [part_sizes], file_size. When the object is downloaded as parts (rather than by ranges), the part_sizes will not be known ahead of time and will be nil in the callback until the first bytes in the part are received.

Returns:

  • (Boolean)

    Returns true when the file is downloaded without any errors.

See Also:



552
553
554
555
556
557
558
559
560
561
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 552

def download_file(destination, options = {})
  downloader = FileDownloader.new(client: client)
  Aws::Plugins::UserAgent.feature('resource') do
    downloader.download(
      destination,
      options.merge(bucket: bucket_name, key: key)
    )
  end
  true
end

#etagString

An entity tag (ETag) is an opaque identifier assigned by a web server to a specific version of a resource found at a URL.

Returns:

  • (String)


206
207
208
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 206

def etag
  data[:etag]
end

#exists?(options = {}) ⇒ Boolean

Returns true if the Object exists.

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Returns:

  • (Boolean)

    Returns true if the Object exists.



532
533
534
535
536
537
538
539
540
541
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 532

def exists?(options = {})
  begin
    wait_until_exists(options.merge(max_attempts: 1))
    true
  rescue Aws::Waiters::Errors::UnexpectedError => e
    raise e.error
  rescue Aws::Waiters::Errors::WaiterFailed
    false
  end
end

#expirationString

If the object expiration is configured (see PutBucketLifecycleConfiguration ), the response includes this header. It includes the expiry-date and rule-id key-value pairs providing object expiration information. The value of the rule-id is URL-encoded.

This functionality is not supported for directory buckets.

Returns:

  • (String)


77
78
79
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 77

def expiration
  data[:expiration]
end

#expiresTime

The date and time at which the object is no longer cacheable.

Returns:

  • (Time)


268
269
270
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 268

def expires
  data[:expires]
end

#expires_stringString

Returns:

  • (String)


273
274
275
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 273

def expires_string
  data[:expires_string]
end

#get(options = {}, &block) ⇒ Types::GetObjectOutput

Examples:

Request syntax with placeholder values


object.get({
  if_match: "IfMatch",
  if_modified_since: Time.now,
  if_none_match: "IfNoneMatch",
  if_unmodified_since: Time.now,
  range: "Range",
  response_cache_control: "ResponseCacheControl",
  response_content_disposition: "ResponseContentDisposition",
  response_content_encoding: "ResponseContentEncoding",
  response_content_language: "ResponseContentLanguage",
  response_content_type: "ResponseContentType",
  response_expires: Time.now,
  version_id: "ObjectVersionId",
  sse_customer_algorithm: "SSECustomerAlgorithm",
  sse_customer_key: "SSECustomerKey",
  sse_customer_key_md5: "SSECustomerKeyMD5",
  request_payer: "requester", # accepts requester
  part_number: 1,
  expected_bucket_owner: "AccountId",
  checksum_mode: "ENABLED", # accepts ENABLED
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :if_match (String)

    Return the object only if its entity tag (ETag) is the same as the one specified in this header; otherwise, return a 412 Precondition Failed error.

    If both of the If-Match and If-Unmodified-Since headers are present in the request as follows: If-Match condition evaluates to true, and; If-Unmodified-Since condition evaluates to false; then, S3 returns 200 OK and the data requested.

    For more information about conditional requests, see RFC 7232.

  • :if_modified_since (Time, DateTime, Date, Integer, String)

    Return the object only if it has been modified since the specified time; otherwise, return a 304 Not Modified error.

    If both of the If-None-Match and If-Modified-Since headers are present in the request as follows:If-None-Match condition evaluates to false, and; If-Modified-Since condition evaluates to true; then, S3 returns 304 Not Modified status code.

    For more information about conditional requests, see RFC 7232.

  • :if_none_match (String)

    Return the object only if its entity tag (ETag) is different from the one specified in this header; otherwise, return a 304 Not Modified error.

    If both of the If-None-Match and If-Modified-Since headers are present in the request as follows:If-None-Match condition evaluates to false, and; If-Modified-Since condition evaluates to true; then, S3 returns 304 Not Modified HTTP status code.

    For more information about conditional requests, see RFC 7232.

  • :if_unmodified_since (Time, DateTime, Date, Integer, String)

    Return the object only if it has not been modified since the specified time; otherwise, return a 412 Precondition Failed error.

    If both of the If-Match and If-Unmodified-Since headers are present in the request as follows: If-Match condition evaluates to true, and; If-Unmodified-Since condition evaluates to false; then, S3 returns 200 OK and the data requested.

    For more information about conditional requests, see RFC 7232.

  • :range (String)

    Downloads the specified byte range of an object. For more information about the HTTP Range header, see https://www.rfc-editor.org/rfc/rfc9110.html#name-range.

    Amazon S3 doesn't support retrieving multiple ranges of data per GET request.

  • :response_cache_control (String)

    Sets the Cache-Control header of the response.

  • :response_content_disposition (String)

    Sets the Content-Disposition header of the response.

  • :response_content_encoding (String)

    Sets the Content-Encoding header of the response.

  • :response_content_language (String)

    Sets the Content-Language header of the response.

  • :response_content_type (String)

    Sets the Content-Type header of the response.

  • :response_expires (Time, DateTime, Date, Integer, String)

    Sets the Expires header of the response.

  • :version_id (String)

    Version ID used to reference a specific version of the object.

    By default, the GetObject operation returns the current version of an object. To return a different version, use the versionId subresource.

    * If you include a versionId in your request header, you must have the s3:GetObjectVersion permission to access a specific version of an object. The s3:GetObject permission is not required in this scenario.

    • If you request the current version of an object without a specific versionId in the request header, only the s3:GetObject permission is required. The s3:GetObjectVersion permission is not required in this scenario.

    • Directory buckets - S3 Versioning isn't enabled and supported for directory buckets. For this API operation, only the null value of the version ID is supported by directory buckets. You can only specify null to the versionId query parameter in the request.

    For more information about versioning, see PutBucketVersioning.

  • :sse_customer_algorithm (String)

    Specifies the algorithm to use when decrypting the object (for example, AES256).

    If you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C) when you store the object in Amazon S3, then when you GET the object, you must use the following headers:

    • x-amz-server-side-encryption-customer-algorithm

    • x-amz-server-side-encryption-customer-key

    • x-amz-server-side-encryption-customer-key-MD5

    For more information about SSE-C, see Server-Side Encryption (Using Customer-Provided Encryption Keys) in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :sse_customer_key (String)

    Specifies the customer-provided encryption key that you originally provided for Amazon S3 to encrypt the data before storing it. This value is used to decrypt the object when recovering it and must match the one used when storing the data. The key must be appropriate for use with the algorithm specified in the x-amz-server-side-encryption-customer-algorithm header.

    If you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C) when you store the object in Amazon S3, then when you GET the object, you must use the following headers:

    • x-amz-server-side-encryption-customer-algorithm

    • x-amz-server-side-encryption-customer-key

    • x-amz-server-side-encryption-customer-key-MD5

    For more information about SSE-C, see Server-Side Encryption (Using Customer-Provided Encryption Keys) in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :sse_customer_key_md5 (String)

    Specifies the 128-bit MD5 digest of the customer-provided encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure that the encryption key was transmitted without error.

    If you encrypt an object by using server-side encryption with customer-provided encryption keys (SSE-C) when you store the object in Amazon S3, then when you GET the object, you must use the following headers:

    • x-amz-server-side-encryption-customer-algorithm

    • x-amz-server-side-encryption-customer-key

    • x-amz-server-side-encryption-customer-key-MD5

    For more information about SSE-C, see Server-Side Encryption (Using Customer-Provided Encryption Keys) in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see Downloading Objects in Requester Pays Buckets in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :part_number (Integer)

    Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' GET request for the part specified. Useful for downloading just a part of an object.

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code 403 Forbidden (access denied).

  • :checksum_mode (String)

    To retrieve the checksum, this mode must be enabled.

Returns:



1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 1666

def get(options = {}, &block)
  options = options.merge(
    bucket: @bucket_name,
    key: @key
  )
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.get_object(options, &block)
  end
  resp.data
end

#head(options = {}) ⇒ Types::HeadObjectOutput

Examples:

Request syntax with placeholder values


object.head({
  if_match: "IfMatch",
  if_modified_since: Time.now,
  if_none_match: "IfNoneMatch",
  if_unmodified_since: Time.now,
  range: "Range",
  version_id: "ObjectVersionId",
  sse_customer_algorithm: "SSECustomerAlgorithm",
  sse_customer_key: "SSECustomerKey",
  sse_customer_key_md5: "SSECustomerKeyMD5",
  request_payer: "requester", # accepts requester
  part_number: 1,
  expected_bucket_owner: "AccountId",
  checksum_mode: "ENABLED", # accepts ENABLED
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :if_match (String)

    Return the object only if its entity tag (ETag) is the same as the one specified; otherwise, return a 412 (precondition failed) error.

    If both of the If-Match and If-Unmodified-Since headers are present in the request as follows:

    • If-Match condition evaluates to true, and;

    • If-Unmodified-Since condition evaluates to false;

    Then Amazon S3 returns 200 OK and the data requested.

    For more information about conditional requests, see RFC 7232.

  • :if_modified_since (Time, DateTime, Date, Integer, String)

    Return the object only if it has been modified since the specified time; otherwise, return a 304 (not modified) error.

    If both of the If-None-Match and If-Modified-Since headers are present in the request as follows:

    • If-None-Match condition evaluates to false, and;

    • If-Modified-Since condition evaluates to true;

    Then Amazon S3 returns the 304 Not Modified response code.

    For more information about conditional requests, see RFC 7232.

  • :if_none_match (String)

    Return the object only if its entity tag (ETag) is different from the one specified; otherwise, return a 304 (not modified) error.

    If both of the If-None-Match and If-Modified-Since headers are present in the request as follows:

    • If-None-Match condition evaluates to false, and;

    • If-Modified-Since condition evaluates to true;

    Then Amazon S3 returns the 304 Not Modified response code.

    For more information about conditional requests, see RFC 7232.

  • :if_unmodified_since (Time, DateTime, Date, Integer, String)

    Return the object only if it has not been modified since the specified time; otherwise, return a 412 (precondition failed) error.

    If both of the If-Match and If-Unmodified-Since headers are present in the request as follows:

    • If-Match condition evaluates to true, and;

    • If-Unmodified-Since condition evaluates to false;

    Then Amazon S3 returns 200 OK and the data requested.

    For more information about conditional requests, see RFC 7232.

  • :range (String)

    HeadObject returns only the metadata for an object. If the Range is satisfiable, only the ContentLength is affected in the response. If the Range is not satisfiable, S3 returns a 416 - Requested Range Not Satisfiable error.

  • :version_id (String)

    Version ID used to reference a specific version of the object.

    For directory buckets in this API operation, only the null value of the version ID is supported.

  • :sse_customer_algorithm (String)

    Specifies the algorithm to use when encrypting the object (for example, AES256).

    This functionality is not supported for directory buckets.

  • :sse_customer_key (String)

    Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon S3 does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side-encryption-customer-algorithm header.

    This functionality is not supported for directory buckets.

  • :sse_customer_key_md5 (String)

    Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure that the encryption key was transmitted without error.

    This functionality is not supported for directory buckets.

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see Downloading Objects in Requester Pays Buckets in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :part_number (Integer)

    Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' HEAD request for the part specified. Useful querying about the size of the part and the number of parts in this object.

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code 403 Forbidden (access denied).

  • :checksum_mode (String)

    To retrieve the checksum, this parameter must be enabled.

    In addition, if you enable ChecksumMode and the object is encrypted with Amazon Web Services Key Management Service (Amazon Web Services KMS), you must have permission to use the kms:Decrypt action for the request to succeed.

Returns:



2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2934

def head(options = {})
  options = options.merge(
    bucket: @bucket_name,
    key: @key
  )
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.head_object(options)
  end
  resp.data
end

#initiate_multipart_upload(options = {}) ⇒ MultipartUpload

Examples:

Request syntax with placeholder values


multipartupload = object.initiate_multipart_upload({
  acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
  cache_control: "CacheControl",
  content_disposition: "ContentDisposition",
  content_encoding: "ContentEncoding",
  content_language: "ContentLanguage",
  content_type: "ContentType",
  expires: Time.now,
  grant_full_control: "GrantFullControl",
  grant_read: "GrantRead",
  grant_read_acp: "GrantReadACP",
  grant_write_acp: "GrantWriteACP",
  metadata: {
    "MetadataKey" => "MetadataValue",
  },
  server_side_encryption: "AES256", # accepts AES256, aws:kms, aws:kms:dsse
  storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS, GLACIER_IR, SNOW, EXPRESS_ONEZONE
  website_redirect_location: "WebsiteRedirectLocation",
  sse_customer_algorithm: "SSECustomerAlgorithm",
  sse_customer_key: "SSECustomerKey",
  sse_customer_key_md5: "SSECustomerKeyMD5",
  ssekms_key_id: "SSEKMSKeyId",
  ssekms_encryption_context: "SSEKMSEncryptionContext",
  bucket_key_enabled: false,
  request_payer: "requester", # accepts requester
  tagging: "TaggingHeader",
  object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
  object_lock_retain_until_date: Time.now,
  object_lock_legal_hold_status: "ON", # accepts ON, OFF
  expected_bucket_owner: "AccountId",
  checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :acl (String)

    The canned ACL to apply to the object. Amazon S3 supports a set of predefined ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees and permissions. For more information, see Canned ACL in the Amazon S3 User Guide.

    By default, all objects are private. Only the owner has full access control. When uploading an object, you can grant access permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the access control list (ACL) on the new object. For more information, see Using ACLs. One way to grant the permissions using the request headers is to specify a canned ACL with the x-amz-acl request header.

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :cache_control (String)

    Specifies caching behavior along the request/reply chain.

  • :content_disposition (String)

    Specifies presentational information for the object.

  • :content_encoding (String)

    Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.

    For directory buckets, only the aws-chunked value is supported in this header field.

  • :content_language (String)

    The language that the content is in.

  • :content_type (String)

    A standard MIME type describing the format of the object data.

  • :expires (Time, DateTime, Date, Integer, String)

    The date and time at which the object is no longer cacheable.

  • :grant_full_control (String)

    Specify access permissions explicitly to give the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.

    By default, all objects are private. Only the owner has full access control. When uploading an object, you can use this header to explicitly grant access permissions to specific Amazon Web Services accounts or groups. This header maps to specific permissions that Amazon S3 supports in an ACL. For more information, see Access Control List (ACL) Overview in the Amazon S3 User Guide.

    You specify each grantee as a type=value pair, where the type is one of the following:

    • id – if the value specified is the canonical user ID of an Amazon Web Services account

    • uri – if you are granting permissions to a predefined group

    • emailAddress – if the value specified is the email address of an Amazon Web Services account

      Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions:

      • US East (N. Virginia)

      • US West (N. California)

      • US West (Oregon)

      • Asia Pacific (Singapore)

      • Asia Pacific (Sydney)

      • Asia Pacific (Tokyo)

      • Europe (Ireland)

      • South America (São Paulo)

      For a list of all the Amazon S3 supported Regions and endpoints, see Regions and Endpoints in the Amazon Web Services General Reference.

    For example, the following x-amz-grant-read header grants the Amazon Web Services accounts identified by account IDs permissions to read object data and its metadata:

    x-amz-grant-read: id="11112222333", id="444455556666"

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :grant_read (String)

    Specify access permissions explicitly to allow grantee to read the object data and its metadata.

    By default, all objects are private. Only the owner has full access control. When uploading an object, you can use this header to explicitly grant access permissions to specific Amazon Web Services accounts or groups. This header maps to specific permissions that Amazon S3 supports in an ACL. For more information, see Access Control List (ACL) Overview in the Amazon S3 User Guide.

    You specify each grantee as a type=value pair, where the type is one of the following:

    • id – if the value specified is the canonical user ID of an Amazon Web Services account

    • uri – if you are granting permissions to a predefined group

    • emailAddress – if the value specified is the email address of an Amazon Web Services account

      Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions:

      • US East (N. Virginia)

      • US West (N. California)

      • US West (Oregon)

      • Asia Pacific (Singapore)

      • Asia Pacific (Sydney)

      • Asia Pacific (Tokyo)

      • Europe (Ireland)

      • South America (São Paulo)

      For a list of all the Amazon S3 supported Regions and endpoints, see Regions and Endpoints in the Amazon Web Services General Reference.

    For example, the following x-amz-grant-read header grants the Amazon Web Services accounts identified by account IDs permissions to read object data and its metadata:

    x-amz-grant-read: id="11112222333", id="444455556666"

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :grant_read_acp (String)

    Specify access permissions explicitly to allows grantee to read the object ACL.

    By default, all objects are private. Only the owner has full access control. When uploading an object, you can use this header to explicitly grant access permissions to specific Amazon Web Services accounts or groups. This header maps to specific permissions that Amazon S3 supports in an ACL. For more information, see Access Control List (ACL) Overview in the Amazon S3 User Guide.

    You specify each grantee as a type=value pair, where the type is one of the following:

    • id – if the value specified is the canonical user ID of an Amazon Web Services account

    • uri – if you are granting permissions to a predefined group

    • emailAddress – if the value specified is the email address of an Amazon Web Services account

      Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions:

      • US East (N. Virginia)

      • US West (N. California)

      • US West (Oregon)

      • Asia Pacific (Singapore)

      • Asia Pacific (Sydney)

      • Asia Pacific (Tokyo)

      • Europe (Ireland)

      • South America (São Paulo)

      For a list of all the Amazon S3 supported Regions and endpoints, see Regions and Endpoints in the Amazon Web Services General Reference.

    For example, the following x-amz-grant-read header grants the Amazon Web Services accounts identified by account IDs permissions to read object data and its metadata:

    x-amz-grant-read: id="11112222333", id="444455556666"

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :grant_write_acp (String)

    Specify access permissions explicitly to allows grantee to allow grantee to write the ACL for the applicable object.

    By default, all objects are private. Only the owner has full access control. When uploading an object, you can use this header to explicitly grant access permissions to specific Amazon Web Services accounts or groups. This header maps to specific permissions that Amazon S3 supports in an ACL. For more information, see Access Control List (ACL) Overview in the Amazon S3 User Guide.

    You specify each grantee as a type=value pair, where the type is one of the following:

    • id – if the value specified is the canonical user ID of an Amazon Web Services account

    • uri – if you are granting permissions to a predefined group

    • emailAddress – if the value specified is the email address of an Amazon Web Services account

      Using email addresses to specify a grantee is only supported in the following Amazon Web Services Regions:

      • US East (N. Virginia)

      • US West (N. California)

      • US West (Oregon)

      • Asia Pacific (Singapore)

      • Asia Pacific (Sydney)

      • Asia Pacific (Tokyo)

      • Europe (Ireland)

      • South America (São Paulo)

      For a list of all the Amazon S3 supported Regions and endpoints, see Regions and Endpoints in the Amazon Web Services General Reference.

    For example, the following x-amz-grant-read header grants the Amazon Web Services accounts identified by account IDs permissions to read object data and its metadata:

    x-amz-grant-read: id="11112222333", id="444455556666"

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :metadata (Hash<String,String>)

    A map of metadata to store with the object in S3.

  • :server_side_encryption (String)

    The server-side encryption algorithm used when you store this object in Amazon S3 (for example, AES256, aws:kms).

    For directory buckets, only server-side encryption with Amazon S3 managed keys (SSE-S3) (AES256) is supported.

  • :storage_class (String)

    By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects. The STANDARD storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. For more information, see Storage Classes in the Amazon S3 User Guide.

    * For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.

    • Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.

  • :website_redirect_location (String)

    If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.

    This functionality is not supported for directory buckets.

  • :sse_customer_algorithm (String)

    Specifies the algorithm to use when encrypting the object (for example, AES256).

    This functionality is not supported for directory buckets.

  • :sse_customer_key (String)

    Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon S3 does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side-encryption-customer-algorithm header.

    This functionality is not supported for directory buckets.

  • :sse_customer_key_md5 (String)

    Specifies the 128-bit MD5 digest of the customer-provided encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure that the encryption key was transmitted without error.

    This functionality is not supported for directory buckets.

  • :ssekms_key_id (String)

    Specifies the ID (Key ID, Key ARN, or Key Alias) of the symmetric encryption customer managed key to use for object encryption.

    This functionality is not supported for directory buckets.

  • :ssekms_encryption_context (String)

    Specifies the Amazon Web Services KMS Encryption Context to use for object encryption. The value of this header is a base64-encoded UTF-8 string holding JSON with the encryption context key-value pairs.

    This functionality is not supported for directory buckets.

  • :bucket_key_enabled (Boolean)

    Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS). Setting this header to true causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS.

    Specifying this header with an object action doesn’t affect bucket-level settings for S3 Bucket Key.

    This functionality is not supported for directory buckets.

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see Downloading Objects in Requester Pays Buckets in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :tagging (String)

    The tag-set for the object. The tag-set must be encoded as URL Query parameters.

    This functionality is not supported for directory buckets.

  • :object_lock_mode (String)

    Specifies the Object Lock mode that you want to apply to the uploaded object.

    This functionality is not supported for directory buckets.

  • :object_lock_retain_until_date (Time, DateTime, Date, Integer, String)

    Specifies the date and time when you want the Object Lock to expire.

    This functionality is not supported for directory buckets.

  • :object_lock_legal_hold_status (String)

    Specifies whether you want to apply a legal hold to the uploaded object.

    This functionality is not supported for directory buckets.

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code 403 Forbidden (access denied).

  • :checksum_algorithm (String)

    Indicates the algorithm that you want Amazon S3 to use to create the checksum for the object. For more information, see Checking object integrity in the Amazon S3 User Guide.

Returns:



2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2151

def initiate_multipart_upload(options = {})
  options = options.merge(
    bucket: @bucket_name,
    key: @key
  )
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.create_multipart_upload(options)
  end
  MultipartUpload.new(
    bucket_name: @bucket_name,
    object_key: @key,
    id: resp.data.upload_id,
    client: @client
  )
end

#keyString

Returns:

  • (String)


41
42
43
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 41

def key
  @key
end

#last_modifiedTime

Date and time when the object was last modified.

Returns:

  • (Time)


125
126
127
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 125

def last_modified
  data[:last_modified]
end

#loadself Also known as: reload

Loads, or reloads #data for the current Aws::S3::Object. Returns self making it possible to chain methods.

object.reload.data

Returns:

  • (self)


502
503
504
505
506
507
508
509
510
511
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 502

def load
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.head_object(
    bucket: @bucket_name,
    key: @key
  )
  end
  @data = resp.data
  self
end

#metadataHash<String,String>

A map of metadata to store with the object in S3.

Returns:

  • (Hash<String,String>)


303
304
305
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 303

def 
  data[:metadata]
end

#missing_metaInteger

This is set to the number of metadata entries not returned in x-amz-meta headers. This can happen if you create metadata using an API like SOAP that supports more flexible metadata than the REST API. For example, using SOAP, you can create metadata whose values are not legal HTTP headers.

This functionality is not supported for directory buckets.

Returns:

  • (Integer)


220
221
222
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 220

def missing_meta
  data[:missing_meta]
end

#move_to(target, options = {}) ⇒ void

This method returns an undefined value.

Copies and deletes the current object. The object will only be deleted if the copy operation succeeds.

Parameters:

  • target (S3::Object, String, Hash)

    Where to copy the object data to. target must be one of the following:

    • Aws::S3::Object
    • Hash - with :bucket and :key
    • String - formatted like "target-bucket-name/target-key"

See Also:



135
136
137
138
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 135

def move_to(target, options = {})
  copy_to(target, options)
  delete
end

#multipart_upload(id) ⇒ MultipartUpload

Parameters:

  • id (String)

Returns:



2966
2967
2968
2969
2970
2971
2972
2973
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2966

def multipart_upload(id)
  MultipartUpload.new(
    bucket_name: @bucket_name,
    object_key: @key,
    id: id,
    client: @client
  )
end

Specifies whether a legal hold is in effect for this object. This header is only returned if the requester has the s3:GetObjectLegalHold permission. This header is not returned if the specified version of this object has never had a legal hold applied. For more information about S3 Object Lock, see Object Lock.

This functionality is not supported for directory buckets.

Returns:

  • (String)


485
486
487
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 485

def object_lock_legal_hold_status
  data[:object_lock_legal_hold_status]
end

#object_lock_modeString

The Object Lock mode, if any, that's in effect for this object. This header is only returned if the requester has the s3:GetObjectRetention permission. For more information about S3 Object Lock, see Object Lock.

This functionality is not supported for directory buckets.

Returns:

  • (String)


455
456
457
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 455

def object_lock_mode
  data[:object_lock_mode]
end

#object_lock_retain_until_dateTime

The date and time when the Object Lock retention period expires. This header is only returned if the requester has the s3:GetObjectRetention permission.

This functionality is not supported for directory buckets.

Returns:

  • (Time)


467
468
469
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 467

def object_lock_retain_until_date
  data[:object_lock_retain_until_date]
end

#parts_countInteger

The count of parts this object has. This value is only returned if you specify partNumber in your request and the object was uploaded as a multipart upload.

Returns:

  • (Integer)


438
439
440
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 438

def parts_count
  data[:parts_count]
end

#presigned_post(options = {}) ⇒ PresignedPost

Creates a PresignedPost that makes it easy to upload a file from a web browser direct to Amazon S3 using an HTML post form with a file field.

See the PresignedPost documentation for more information.

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

Returns:

See Also:



149
150
151
152
153
154
155
156
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 149

def presigned_post(options = {})
  PresignedPost.new(
    client.config.credentials,
    client.config.region,
    bucket_name,
    { key: key, url: bucket.url }.merge(options)
  )
end

#presigned_request(method, params = {}) ⇒ String, Hash

Allows you to create presigned URL requests for S3 operations. This method returns a tuple containing the URL and the signed X-amz-* headers to be used with the presigned url.

Examples:

Pre-signed GET URL, valid for one hour


obj.presigned_request(:get, expires_in: 3600)
#=> ["https://bucket-name.s3.amazonaws.com/object-key?...", {}]

Pre-signed PUT with a canned ACL


# the object uploaded using this URL will be publicly accessible
obj.presigned_request(:put, acl: 'public-read')
#=> ["https://bucket-name.s3.amazonaws.com/object-key?...",
 {"x-amz-acl"=>"public-read"}]

Parameters:

Options Hash (params):

  • :virtual_host (Boolean) — default: false

    When true the presigned URL will use the bucket name as a virtual host.

    bucket = Aws::S3::Bucket.new('my.bucket.com') bucket.object('key').presigned_request(virtual_host: true) #=> ["http://my.bucket.com/key?...", {}]

  • :expires_in (Integer) — default: 900

    Number of seconds before the pre-signed URL expires. This may not exceed one week (604800 seconds). Note that the pre-signed URL is also only valid as long as credentials used to sign it are. For example, when using IAM roles, temporary tokens generated for signing also have a default expiration which will affect the effective expiration of the pre-signed URL.

Returns:

  • (String, Hash)

    A tuple with a presigned URL and headers that should be included with the request.

Raises:

  • (ArgumentError)

    Raised if :expires_in exceeds one week (604800 seconds).



293
294
295
296
297
298
299
300
301
302
303
304
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 293

def presigned_request(method, params = {})
  presigner = Presigner.new(client: client)

  if %w(delete head get put).include?(method.to_s)
    method = "#{method}_object".to_sym
  end

  presigner.presigned_request(
    method.downcase,
    params.merge(bucket: bucket_name, key: key)
  )
end

#presigned_url(method, params = {}) ⇒ String

Generates a pre-signed URL for this object.

Examples:

Pre-signed GET URL, valid for one hour


obj.presigned_url(:get, expires_in: 3600)
#=> "https://bucket-name.s3.amazonaws.com/object-key?..."

Pre-signed PUT with a canned ACL


# the object uploaded using this URL will be publicly accessible
obj.presigned_url(:put, acl: 'public-read')
#=> "https://bucket-name.s3.amazonaws.com/object-key?..."

Pre-signed UploadPart PUT


# the object uploaded using this URL will be publicly accessible
obj.presigned_url(:upload_part, part_number: 1, upload_id: 'uploadIdToken')
#=> "https://bucket-name.s3.amazonaws.com/object-key?..."

Parameters:

Options Hash (params):

  • :virtual_host (Boolean) — default: false

    When true the presigned URL will use the bucket name as a virtual host.

    bucket = Aws::S3::Bucket.new('my.bucket.com') bucket.object('key').presigned_url(virtual_host: true) #=> "http://my.bucket.com/key?..."

  • :expires_in (Integer) — default: 900

    Number of seconds before the pre-signed URL expires. This may not exceed one week (604800 seconds). Note that the pre-signed URL is also only valid as long as credentials used to sign it are. For example, when using IAM roles, temporary tokens generated for signing also have a default expiration which will affect the effective expiration of the pre-signed URL.

Returns:

  • (String)

Raises:

  • (ArgumentError)

    Raised if :expires_in exceeds one week (604800 seconds).



220
221
222
223
224
225
226
227
228
229
230
231
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 220

def presigned_url(method, params = {})
  presigner = Presigner.new(client: client)

  if %w(delete head get put).include?(method.to_s)
    method = "#{method}_object".to_sym
  end

  presigner.presigned_url(
    method.downcase,
    params.merge(bucket: bucket_name, key: key)
  )
end

#public_url(options = {}) ⇒ String

Returns the public (un-signed) URL for this object.

s3.bucket('bucket-name').object('obj-key').public_url
#=> "https://bucket-name.s3.amazonaws.com/obj-key"

To use virtual hosted bucket url. Uses https unless secure: false is set. If the bucket name contains dots (.) then you will need to set secure: false.

s3.bucket('my-bucket.com').object('key')
  .public_url(virtual_host: true)
#=> "https://my-bucket.com/key"

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :virtual_host (Boolean) — default: false

    When true, the bucket name will be used as the host name. This is useful when you have a CNAME configured for the bucket.

  • :secure (Boolean) — default: true

    When false, http will be used with virtual_host. This is required when the bucket name has a dot (.) in it.

Returns:

  • (String)


328
329
330
331
332
333
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 328

def public_url(options = {})
  url = URI.parse(bucket.url(options))
  url.path += '/' unless url.path[-1] == '/'
  url.path += key.gsub(/[^\/]+/) { |s| Seahorse::Util.uri_escape(s) }
  url.to_s
end

#put(options = {}) ⇒ Types::PutObjectOutput

Examples:

Request syntax with placeholder values


object.put({
  acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
  body: source_file,
  cache_control: "CacheControl",
  content_disposition: "ContentDisposition",
  content_encoding: "ContentEncoding",
  content_language: "ContentLanguage",
  content_length: 1,
  content_md5: "ContentMD5",
  content_type: "ContentType",
  checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
  checksum_crc32: "ChecksumCRC32",
  checksum_crc32c: "ChecksumCRC32C",
  checksum_sha1: "ChecksumSHA1",
  checksum_sha256: "ChecksumSHA256",
  expires: Time.now,
  grant_full_control: "GrantFullControl",
  grant_read: "GrantRead",
  grant_read_acp: "GrantReadACP",
  grant_write_acp: "GrantWriteACP",
  metadata: {
    "MetadataKey" => "MetadataValue",
  },
  server_side_encryption: "AES256", # accepts AES256, aws:kms, aws:kms:dsse
  storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS, GLACIER_IR, SNOW, EXPRESS_ONEZONE
  website_redirect_location: "WebsiteRedirectLocation",
  sse_customer_algorithm: "SSECustomerAlgorithm",
  sse_customer_key: "SSECustomerKey",
  sse_customer_key_md5: "SSECustomerKeyMD5",
  ssekms_key_id: "SSEKMSKeyId",
  ssekms_encryption_context: "SSEKMSEncryptionContext",
  bucket_key_enabled: false,
  request_payer: "requester", # accepts requester
  tagging: "TaggingHeader",
  object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
  object_lock_retain_until_date: Time.now,
  object_lock_legal_hold_status: "ON", # accepts ON, OFF
  expected_bucket_owner: "AccountId",
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :acl (String)

    The canned ACL to apply to the object. For more information, see Canned ACL in the Amazon S3 User Guide.

    When adding a new object, you can use headers to grant ACL-based permissions to individual Amazon Web Services accounts or to predefined groups defined by Amazon S3. These permissions are then added to the ACL on the object. By default, all objects are private. Only the owner has full access control. For more information, see Access Control List (ACL) Overview and Managing ACLs Using the REST API in the Amazon S3 User Guide.

    If the bucket that you're uploading objects to uses the bucket owner enforced setting for S3 Object Ownership, ACLs are disabled and no longer affect permissions. Buckets that use this setting only accept PUT requests that don't specify an ACL or PUT requests that specify bucket owner full control ACLs, such as the bucket-owner-full-control canned ACL or an equivalent form of this ACL expressed in the XML format. PUT requests that contain other ACLs (for example, custom grants to certain Amazon Web Services accounts) fail and return a 400 error with the error code AccessControlListNotSupported. For more information, see Controlling ownership of objects and disabling ACLs in the Amazon S3 User Guide.

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :body (String, StringIO, File)

    Object data.

  • :cache_control (String)

    Can be used to specify caching behavior along the request/reply chain. For more information, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.

  • :content_disposition (String)

    Specifies presentational information for the object. For more information, see https://www.rfc-editor.org/rfc/rfc6266#section-4.

  • :content_encoding (String)

    Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field. For more information, see https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding.

  • :content_language (String)

    The language the content is in.

  • :content_length (Integer)

    Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically. For more information, see https://www.rfc-editor.org/rfc/rfc9110.html#name-content-length.

  • :content_md5 (String)

    The base64-encoded 128-bit MD5 digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the data is the same data that was originally sent. Although it is optional, we recommend using the Content-MD5 mechanism as an end-to-end integrity check. For more information about REST request authentication, see REST Authentication.

    The Content-MD5 header is required for any request to upload an object with a retention period configured using Amazon S3 Object Lock. For more information about Amazon S3 Object Lock, see Amazon S3 Object Lock Overview in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :content_type (String)

    A standard MIME type describing the format of the contents. For more information, see https://www.rfc-editor.org/rfc/rfc9110.html#name-content-type.

  • :checksum_algorithm (String)

    Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding x-amz-checksum-algorithm or x-amz-trailer header sent. Otherwise, Amazon S3 fails the request with the HTTP status code 400 Bad Request.

    For the x-amz-checksum-algorithm header, replace algorithm with the supported algorithm from the following list:

    • CRC32

    • CRC32C

    • SHA1

    • SHA256

    For more information, see Checking object integrity in the Amazon S3 User Guide.

    If the individual checksum value you provide through x-amz-checksum-algorithm doesn't match the checksum algorithm you set through x-amz-sdk-checksum-algorithm, Amazon S3 ignores any provided ChecksumAlgorithm parameter and uses the checksum algorithm that matches the provided value in x-amz-checksum-algorithm.

    For directory buckets, when you use Amazon Web Services SDKs, CRC32 is the default checksum algorithm that's used for performance.

  • :checksum_crc32 (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 32-bit CRC32 checksum of the object. For more information, see Checking object integrity in the Amazon S3 User Guide.

  • :checksum_crc32c (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 32-bit CRC32C checksum of the object. For more information, see Checking object integrity in the Amazon S3 User Guide.

  • :checksum_sha1 (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 160-bit SHA-1 digest of the object. For more information, see Checking object integrity in the Amazon S3 User Guide.

  • :checksum_sha256 (String)

    This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the base64-encoded, 256-bit SHA-256 digest of the object. For more information, see Checking object integrity in the Amazon S3 User Guide.

  • :expires (Time, DateTime, Date, Integer, String)

    The date and time at which the object is no longer cacheable. For more information, see https://www.rfc-editor.org/rfc/rfc7234#section-5.3.

  • :grant_full_control (String)

    Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :grant_read (String)

    Allows grantee to read the object data and its metadata.

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :grant_read_acp (String)

    Allows grantee to read the object ACL.

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :grant_write_acp (String)

    Allows grantee to write the ACL for the applicable object.

    * This functionality is not supported for directory buckets.

    • This functionality is not supported for Amazon S3 on Outposts.

  • :metadata (Hash<String,String>)

    A map of metadata to store with the object in S3.

  • :server_side_encryption (String)

    The server-side encryption algorithm that was used when you store this object in Amazon S3 (for example, AES256, aws:kms, aws:kms:dsse).

    General purpose buckets - You have four mutually exclusive options to protect data using server-side encryption in Amazon S3, depending on how you choose to manage the encryption keys. Specifically, the encryption key options are Amazon S3 managed keys (SSE-S3), Amazon Web Services KMS keys (SSE-KMS or DSSE-KMS), and customer-provided keys (SSE-C). Amazon S3 encrypts data with server-side encryption by using Amazon S3 managed keys (SSE-S3) by default. You can optionally tell Amazon S3 to encrypt data at rest by using server-side encryption with other key options. For more information, see Using Server-Side Encryption in the Amazon S3 User Guide.

    Directory buckets - For directory buckets, only the server-side encryption with Amazon S3 managed keys (SSE-S3) (AES256) value is supported.

  • :storage_class (String)

    By default, Amazon S3 uses the STANDARD Storage Class to store newly created objects. The STANDARD storage class provides high durability and high availability. Depending on performance needs, you can specify a different Storage Class. For more information, see Storage Classes in the Amazon S3 User Guide.

    * For directory buckets, only the S3 Express One Zone storage class is supported to store newly created objects.

    • Amazon S3 on Outposts only uses the OUTPOSTS Storage Class.

  • :website_redirect_location (String)

    If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata. For information about object metadata, see Object Key and Metadata in the Amazon S3 User Guide.

    In the following example, the request header sets the redirect to an object (anotherPage.html) in the same bucket:

    x-amz-website-redirect-location: /anotherPage.html

    In the following example, the request header sets the object redirect to another website:

    x-amz-website-redirect-location: http://www.example.com/

    For more information about website hosting in Amazon S3, see Hosting Websites on Amazon S3 and How to Configure Website Page Redirects in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :sse_customer_algorithm (String)

    Specifies the algorithm to use when encrypting the object (for example, AES256).

    This functionality is not supported for directory buckets.

  • :sse_customer_key (String)

    Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon S3 does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side-encryption-customer-algorithm header.

    This functionality is not supported for directory buckets.

  • :sse_customer_key_md5 (String)

    Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure that the encryption key was transmitted without error.

    This functionality is not supported for directory buckets.

  • :ssekms_key_id (String)

    If x-amz-server-side-encryption has a valid value of aws:kms or aws:kms:dsse, this header specifies the ID (Key ID, Key ARN, or Key Alias) of the Key Management Service (KMS) symmetric encryption customer managed key that was used for the object. If you specify x-amz-server-side-encryption:aws:kms or x-amz-server-side-encryption:aws:kms:dsse, but do not provide x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 uses the Amazon Web Services managed key (aws/s3) to protect the data. If the KMS key does not exist in the same account that's issuing the command, you must use the full ARN and not just the ID.

    This functionality is not supported for directory buckets.

  • :ssekms_encryption_context (String)

    Specifies the Amazon Web Services KMS Encryption Context to use for object encryption. The value of this header is a base64-encoded UTF-8 string holding JSON with the encryption context key-value pairs. This value is stored as object metadata and automatically gets passed on to Amazon Web Services KMS for future GetObject or CopyObject operations on this object. This value must be explicitly added during CopyObject operations.

    This functionality is not supported for directory buckets.

  • :bucket_key_enabled (Boolean)

    Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption with server-side encryption using Key Management Service (KMS) keys (SSE-KMS). Setting this header to true causes Amazon S3 to use an S3 Bucket Key for object encryption with SSE-KMS.

    Specifying this header with a PUT action doesn’t affect bucket-level settings for S3 Bucket Key.

    This functionality is not supported for directory buckets.

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see Downloading Objects in Requester Pays Buckets in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :tagging (String)

    The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, "Key1=Value1")

    This functionality is not supported for directory buckets.

  • :object_lock_mode (String)

    The Object Lock mode that you want to apply to this object.

    This functionality is not supported for directory buckets.

  • :object_lock_retain_until_date (Time, DateTime, Date, Integer, String)

    The date and time when you want this object's Object Lock to expire. Must be formatted as a timestamp parameter.

    This functionality is not supported for directory buckets.

  • :object_lock_legal_hold_status (String)

    Specifies whether a legal hold will be applied to this object. For more information about S3 Object Lock, see Object Lock in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code 403 Forbidden (access denied).

Returns:



2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2622

def put(options = {})
  options = options.merge(
    bucket: @bucket_name,
    key: @key
  )
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.put_object(options)
  end
  resp.data
end

#replication_statusString

Amazon S3 can return this header if your request involves a bucket that is either a source or a destination in a replication rule.

In replication, you have a source bucket on which you configure replication and destination bucket or buckets where Amazon S3 stores object replicas. When you request an object (GetObject) or object metadata (HeadObject) from these buckets, Amazon S3 will return the x-amz-replication-status header in the response as follows:

  • If requesting an object from the source bucket, Amazon S3 will return the x-amz-replication-status header if the object in your request is eligible for replication.

    For example, suppose that in your replication configuration, you specify object prefix TaxDocs requesting Amazon S3 to replicate objects with key prefix TaxDocs. Any objects you upload with this key name prefix, for example TaxDocs/document1.pdf, are eligible for replication. For any object request with this key name prefix, Amazon S3 will return the x-amz-replication-status header with value PENDING, COMPLETED or FAILED indicating object replication status.

  • If requesting an object from a destination bucket, Amazon S3 will return the x-amz-replication-status header with value REPLICA if the object in your request is a replica that Amazon S3 created and there is no replica modification replication in progress.

  • When replicating objects to multiple destination buckets, the x-amz-replication-status header acts differently. The header of the source object will only return a value of COMPLETED when replication is successful to all destinations. The header will remain at value PENDING until replication has completed for all destinations. If one or more destinations fails replication the header will return FAILED.

For more information, see Replication.

This functionality is not supported for directory buckets.

Returns:

  • (String)


430
431
432
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 430

def replication_status
  data[:replication_status]
end

#request_chargedString

If present, indicates that the requester was successfully charged for the request.

This functionality is not supported for directory buckets.

Returns:

  • (String)


381
382
383
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 381

def request_charged
  data[:request_charged]
end

#restoreString

If the object is an archived object (an object whose storage class is GLACIER), the response includes this header if either the archive restoration is in progress (see RestoreObject or an archive copy is already restored.

If an archive copy is already restored, the header value indicates when Amazon S3 is scheduled to delete the object copy. For example:

x-amz-restore: ongoing-request="false", expiry-date="Fri, 21 Dec 2012 00:00:00 GMT"

If the object restoration is in progress, the header returns the value ongoing-request="true".

For more information about archiving objects, see Transitioning Objects: General Considerations.

This functionality is not supported for directory buckets. Only the S3 Express One Zone storage class is supported by directory buckets to store objects.

Returns:

  • (String)


109
110
111
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 109

def restore
  data[:restore]
end

#restore_object(options = {}) ⇒ Types::RestoreObjectOutput

Examples:

Request syntax with placeholder values


object.restore_object({
  version_id: "ObjectVersionId",
  restore_request: {
    days: 1,
    glacier_job_parameters: {
      tier: "Standard", # required, accepts Standard, Bulk, Expedited
    },
    type: "SELECT", # accepts SELECT
    tier: "Standard", # accepts Standard, Bulk, Expedited
    description: "Description",
    select_parameters: {
      input_serialization: { # required
        csv: {
          file_header_info: "USE", # accepts USE, IGNORE, NONE
          comments: "Comments",
          quote_escape_character: "QuoteEscapeCharacter",
          record_delimiter: "RecordDelimiter",
          field_delimiter: "FieldDelimiter",
          quote_character: "QuoteCharacter",
          allow_quoted_record_delimiter: false,
        },
        compression_type: "NONE", # accepts NONE, GZIP, BZIP2
        json: {
          type: "DOCUMENT", # accepts DOCUMENT, LINES
        },
        parquet: {
        },
      },
      expression_type: "SQL", # required, accepts SQL
      expression: "Expression", # required
      output_serialization: { # required
        csv: {
          quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
          quote_escape_character: "QuoteEscapeCharacter",
          record_delimiter: "RecordDelimiter",
          field_delimiter: "FieldDelimiter",
          quote_character: "QuoteCharacter",
        },
        json: {
          record_delimiter: "RecordDelimiter",
        },
      },
    },
    output_location: {
      s3: {
        bucket_name: "BucketName", # required
        prefix: "LocationPrefix", # required
        encryption: {
          encryption_type: "AES256", # required, accepts AES256, aws:kms, aws:kms:dsse
          kms_key_id: "SSEKMSKeyId",
          kms_context: "KMSContext",
        },
        canned_acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
        access_control_list: [
          {
            grantee: {
              display_name: "DisplayName",
              email_address: "EmailAddress",
              id: "ID",
              type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
              uri: "URI",
            },
            permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
          },
        ],
        tagging: {
          tag_set: [ # required
            {
              key: "ObjectKey", # required
              value: "Value", # required
            },
          ],
        },
        user_metadata: [
          {
            name: "MetadataKey",
            value: "MetadataValue",
          },
        ],
        storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS, GLACIER_IR, SNOW, EXPRESS_ONEZONE
      },
    },
  },
  request_payer: "requester", # accepts requester
  checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
  expected_bucket_owner: "AccountId",
})

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :version_id (String)

    VersionId used to reference a specific version of the object.

  • :restore_request (Types::RestoreRequest)

    Container for restore job parameters.

  • :request_payer (String)

    Confirms that the requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. If either the source or destination S3 bucket has Requester Pays enabled, the requester will pay for corresponding charges to copy the object. For information about downloading objects from Requester Pays buckets, see Downloading Objects in Requester Pays Buckets in the Amazon S3 User Guide.

    This functionality is not supported for directory buckets.

  • :checksum_algorithm (String)

    Indicates the algorithm used to create the checksum for the object when you use the SDK. This header will not provide any additional functionality if you don't use the SDK. When you send this header, there must be a corresponding x-amz-checksum or x-amz-trailer header sent. Otherwise, Amazon S3 fails the request with the HTTP status code 400 Bad Request. For more information, see Checking object integrity in the Amazon S3 User Guide.

    If you provide an individual checksum, Amazon S3 ignores any provided ChecksumAlgorithm parameter.

  • :expected_bucket_owner (String)

    The account ID of the expected bucket owner. If the account ID that you provide does not match the actual owner of the bucket, the request fails with the HTTP status code 403 Forbidden (access denied).

Returns:



2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2763

def restore_object(options = {})
  options = options.merge(
    bucket: @bucket_name,
    key: @key
  )
  resp = Aws::Plugins::UserAgent.feature('resource') do
    @client.restore_object(options)
  end
  resp.data
end

#server_side_encryptionString

The server-side encryption algorithm used when you store this object in Amazon S3 (for example, AES256, aws:kms, aws:kms:dsse).

For directory buckets, only server-side encryption with Amazon S3 managed keys (SSE-S3) (AES256) is supported.

Returns:

  • (String)


297
298
299
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 297

def server_side_encryption
  data[:server_side_encryption]
end

#sse_customer_algorithmString

If server-side encryption with a customer-provided encryption key was requested, the response will include this header to confirm the encryption algorithm that's used.

This functionality is not supported for directory buckets.

Returns:

  • (String)


315
316
317
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 315

def sse_customer_algorithm
  data[:sse_customer_algorithm]
end

#sse_customer_key_md5String

If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide the round-trip message integrity verification of the customer-provided encryption key.

This functionality is not supported for directory buckets.

Returns:

  • (String)


328
329
330
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 328

def sse_customer_key_md5
  data[:sse_customer_key_md5]
end

#ssekms_key_idString

If present, indicates the ID of the Key Management Service (KMS) symmetric encryption customer managed key that was used for the object.

This functionality is not supported for directory buckets.

Returns:

  • (String)


340
341
342
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 340

def ssekms_key_id
  data[:ssekms_key_id]
end

#storage_classString

Provides storage class information of the object. Amazon S3 returns this header for all objects except for S3 Standard storage class objects.

For more information, see Storage Classes.

Directory buckets - Only the S3 Express One Zone storage class is supported by directory buckets to store objects.

Returns:

  • (String)


370
371
372
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 370

def storage_class
  data[:storage_class]
end

#upload_file(source, options = {}) {|response| ... } ⇒ Boolean

Uploads a file from disk to the current object in S3.

# small files are uploaded in a single API call
obj.upload_file('/path/to/file')

Files larger than or equal to :multipart_threshold are uploaded using the Amazon S3 multipart upload APIs.

# large files are automatically split into parts
# and the parts are uploaded in parallel
obj.upload_file('/path/to/very_large_file')

The response of the S3 upload API is yielded if a block given.

# API response will have etag value of the file
obj.upload_file('/path/to/file') do |response|
  etag = response.etag
end

You can provide a callback to monitor progress of the upload:

# bytes and totals are each an array with 1 entry per part
progress = Proc.new do |bytes, totals|
  puts bytes.map.with_index { |b, i| "Part #{i+1}: #{b} / #{totals[i]}"}.join(' ') + "Total: #{100.0 * bytes.sum / totals.sum }%" }
end
obj.upload_file('/path/to/file', progress_callback: progress)

Parameters:

  • source (String, Pathname, File, Tempfile)

    A file on the local file system that will be uploaded as this object. This can either be a String or Pathname to the file, an open File object, or an open Tempfile object. If you pass an open File or Tempfile object, then you are responsible for closing it after the upload completes. When using an open Tempfile, rewind it before uploading or else the object will be empty.

  • options (Hash) (defaults to: {})

    Additional options for Client#put_object when file sizes below the multipart threshold. For files larger than the multipart threshold, options for Client#create_multipart_upload, Client#complete_multipart_upload, and Client#upload_part can be provided.

Options Hash (options):

  • :multipart_threshold (Integer) — default: 104857600

    Files larger than or equal to :multipart_threshold are uploaded using the S3 multipart APIs. Default threshold is 100MB.

  • :thread_count (Integer) — default: 10

    The number of parallel multipart uploads. This option is not used if the file is smaller than :multipart_threshold.

  • :progress_callback (Proc)

    A Proc that will be called when each chunk of the upload is sent. It will be invoked with [bytes_read], [total_sizes]

Yields:

  • (response)

Returns:

  • (Boolean)

    Returns true when the object is uploaded without any errors.

Raises:

  • (MultipartUploadError)

    If an object is being uploaded in parts, and the upload can not be completed, then the upload is aborted and this error is raised. The raised error has a #errors method that returns the failures that caused the upload to be aborted.

See Also:



470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 470

def upload_file(source, options = {})
  uploading_options = options.dup
  uploader = FileUploader.new(
    multipart_threshold: uploading_options.delete(:multipart_threshold),
    client: client
  )
  response = Aws::Plugins::UserAgent.feature('resource') do
    uploader.upload(
      source,
      uploading_options.merge(bucket: bucket_name, key: key)
    )
  end
  yield response if block_given?
  true
end

#upload_stream(options = {}, &block) ⇒ Boolean

Uploads a stream in a streaming fashion to the current object in S3.

Passed chunks automatically split into multipart upload parts and the parts are uploaded in parallel. This allows for streaming uploads that never touch the disk.

Note that this is known to have issues in JRuby until jruby-9.1.15.0, so avoid using this with older versions of JRuby.

Examples:

Streaming chunks of data

obj.upload_stream do |write_stream|
  10.times { write_stream << 'foo' }
end

Streaming chunks of data

obj.upload_stream do |write_stream|
  IO.copy_stream(IO.popen('ls'), write_stream)
end

Streaming chunks of data

obj.upload_stream do |write_stream|
  IO.copy_stream(STDIN, write_stream)
end

Parameters:

Options Hash (options):

  • :thread_count (Integer) — default: 10

    The number of parallel multipart uploads

  • :tempfile (Boolean) — default: false

    Normally read data is stored in memory when building the parts in order to complete the underlying multipart upload. By passing :tempfile => true data read will be temporarily stored on disk reducing the memory footprint vastly.

  • :part_size (Integer) — default: 5242880

    Define how big each part size but the last should be. Default :part_size is 5 * 1024 * 1024.

Returns:

  • (Boolean)

    Returns true when the object is uploaded without any errors.

Raises:

  • (MultipartUploadError)

    If an object is being uploaded in parts, and the upload can not be completed, then the upload is aborted and this error is raised. The raised error has a #errors method that returns the failures that caused the upload to be aborted.

See Also:



385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/customizations/object.rb', line 385

def upload_stream(options = {}, &block)
  uploading_options = options.dup
  uploader = MultipartStreamUploader.new(
    client: client,
    thread_count: uploading_options.delete(:thread_count),
    tempfile: uploading_options.delete(:tempfile),
    part_size: uploading_options.delete(:part_size)
  )
  Aws::Plugins::UserAgent.feature('resource') do
    uploader.upload(
      uploading_options.merge(bucket: bucket_name, key: key),
      &block
    )
  end
  true
end

#version(id) ⇒ ObjectVersion

Parameters:

  • id (String)

Returns:



2977
2978
2979
2980
2981
2982
2983
2984
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 2977

def version(id)
  ObjectVersion.new(
    bucket_name: @bucket_name,
    object_key: @key,
    id: id,
    client: @client
  )
end

#version_idString

Version ID of the object.

This functionality is not supported for directory buckets.

Returns:

  • (String)


230
231
232
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 230

def version_id
  data[:version_id]
end

#wait_until(options = {}) {|resource| ... } ⇒ Resource

Deprecated.

Use [Aws::S3::Client] #wait_until instead

Note:

The waiting operation is performed on a copy. The original resource remains unchanged.

Waiter polls an API operation until a resource enters a desired state.

Basic Usage

Waiter will polls until it is successful, it fails by entering a terminal state, or until a maximum number of attempts are made.

# polls in a loop until condition is true
resource.wait_until(options) {|resource| condition}

Example

instance.wait_until(max_attempts:10, delay:5) do |instance|
  instance.state.name == 'running'
end

Configuration

You can configure the maximum number of polling attempts, and the delay (in seconds) between each polling attempt. The waiting condition is set by passing a block to #wait_until:

# poll for ~25 seconds
resource.wait_until(max_attempts:5,delay:5) {|resource|...}

Callbacks

You can be notified before each polling attempt and before each delay. If you throw :success or :failure from these callbacks, it will terminate the waiter.

started_at = Time.now
# poll for 1 hour, instead of a number of attempts
proc = Proc.new do |attempts, response|
  throw :failure if Time.now - started_at > 3600
end

  # disable max attempts
instance.wait_until(before_wait:proc, max_attempts:nil) {...}

Handling Errors

When a waiter is successful, it returns the Resource. When a waiter fails, it raises an error.

begin
  resource.wait_until(...)
rescue Aws::Waiters::Errors::WaiterFailed
  # resource did not enter the desired state in time
end

attempts attempt in seconds invoked before each attempt invoked before each wait

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :max_attempts (Integer) — default: 10

    Maximum number of

  • :delay (Integer) — default: 10

    Delay between each

  • :before_attempt (Proc) — default: nil

    Callback

  • :before_wait (Proc) — default: nil

    Callback

Yield Parameters:

  • resource (Resource)

    to be used in the waiting condition.

Returns:

  • (Resource)

    if the waiter was successful

Raises:

  • (Aws::Waiters::Errors::FailureStateError)

    Raised when the waiter terminates because the waiter has entered a state that it will not transition out of, preventing success.

    yet successful.

  • (Aws::Waiters::Errors::UnexpectedError)

    Raised when an error is encountered while polling for a resource that is not expected.

  • (NotImplementedError)

    Raised when the resource does not



665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 665

def wait_until(options = {}, &block)
  self_copy = self.dup
  attempts = 0
  options[:max_attempts] = 10 unless options.key?(:max_attempts)
  options[:delay] ||= 10
  options[:poller] = Proc.new do
    attempts += 1
    if block.call(self_copy)
      [:success, self_copy]
    else
      self_copy.reload unless attempts == options[:max_attempts]
      :retry
    end
  end
  Aws::Plugins::UserAgent.feature('resource') do
    Aws::Waiters::Waiter.new(options).wait({})
  end
end

#wait_until_exists(options = {}, &block) ⇒ Object

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :max_attempts (Integer) — default: 20
  • :delay (Float) — default: 5
  • :before_attempt (Proc)
  • :before_wait (Proc)

Returns:



549
550
551
552
553
554
555
556
557
558
559
560
561
562
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 549

def wait_until_exists(options = {}, &block)
  options, params = separate_params_and_options(options)
  waiter = Waiters::ObjectExists.new(options)
  yield_waiter_and_warn(waiter, &block) if block_given?
  Aws::Plugins::UserAgent.feature('resource') do
    waiter.wait(params.merge(bucket: @bucket_name,
    key: @key))
  end
  Object.new({
    bucket_name: @bucket_name,
    key: @key,
    client: @client
  })
end

#wait_until_not_exists(options = {}, &block) ⇒ Object

Parameters:

  • options (Hash) (defaults to: {})

    ({})

Options Hash (options):

  • :max_attempts (Integer) — default: 20
  • :delay (Float) — default: 5
  • :before_attempt (Proc)
  • :before_wait (Proc)

Returns:



570
571
572
573
574
575
576
577
578
579
580
581
582
583
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 570

def wait_until_not_exists(options = {}, &block)
  options, params = separate_params_and_options(options)
  waiter = Waiters::ObjectNotExists.new(options)
  yield_waiter_and_warn(waiter, &block) if block_given?
  Aws::Plugins::UserAgent.feature('resource') do
    waiter.wait(params.merge(bucket: @bucket_name,
    key: @key))
  end
  Object.new({
    bucket_name: @bucket_name,
    key: @key,
    client: @client
  })
end

#website_redirect_locationString

If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.

This functionality is not supported for directory buckets.

Returns:

  • (String)


285
286
287
# File 'gems/aws-sdk-s3/lib/aws-sdk-s3/object.rb', line 285

def website_redirect_location
  data[:website_redirect_location]
end