aws-sdk-s3 1.75.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/lib/aws-sdk-s3.rb +73 -0
  3. data/lib/aws-sdk-s3/bucket.rb +861 -0
  4. data/lib/aws-sdk-s3/bucket_acl.rb +277 -0
  5. data/lib/aws-sdk-s3/bucket_cors.rb +262 -0
  6. data/lib/aws-sdk-s3/bucket_lifecycle.rb +264 -0
  7. data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +283 -0
  8. data/lib/aws-sdk-s3/bucket_logging.rb +251 -0
  9. data/lib/aws-sdk-s3/bucket_notification.rb +293 -0
  10. data/lib/aws-sdk-s3/bucket_policy.rb +242 -0
  11. data/lib/aws-sdk-s3/bucket_region_cache.rb +81 -0
  12. data/lib/aws-sdk-s3/bucket_request_payment.rb +236 -0
  13. data/lib/aws-sdk-s3/bucket_tagging.rb +251 -0
  14. data/lib/aws-sdk-s3/bucket_versioning.rb +312 -0
  15. data/lib/aws-sdk-s3/bucket_website.rb +292 -0
  16. data/lib/aws-sdk-s3/client.rb +11818 -0
  17. data/lib/aws-sdk-s3/client_api.rb +3014 -0
  18. data/lib/aws-sdk-s3/customizations.rb +34 -0
  19. data/lib/aws-sdk-s3/customizations/bucket.rb +162 -0
  20. data/lib/aws-sdk-s3/customizations/multipart_upload.rb +44 -0
  21. data/lib/aws-sdk-s3/customizations/object.rb +389 -0
  22. data/lib/aws-sdk-s3/customizations/object_summary.rb +85 -0
  23. data/lib/aws-sdk-s3/customizations/types/list_object_versions_output.rb +13 -0
  24. data/lib/aws-sdk-s3/encryption.rb +21 -0
  25. data/lib/aws-sdk-s3/encryption/client.rb +375 -0
  26. data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +190 -0
  27. data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +65 -0
  28. data/lib/aws-sdk-s3/encryption/default_key_provider.rb +40 -0
  29. data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +61 -0
  30. data/lib/aws-sdk-s3/encryption/errors.rb +15 -0
  31. data/lib/aws-sdk-s3/encryption/io_auth_decrypter.rb +58 -0
  32. data/lib/aws-sdk-s3/encryption/io_decrypter.rb +36 -0
  33. data/lib/aws-sdk-s3/encryption/io_encrypter.rb +71 -0
  34. data/lib/aws-sdk-s3/encryption/key_provider.rb +31 -0
  35. data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +75 -0
  36. data/lib/aws-sdk-s3/encryption/materials.rb +60 -0
  37. data/lib/aws-sdk-s3/encryption/utils.rb +81 -0
  38. data/lib/aws-sdk-s3/encryptionV2/client.rb +388 -0
  39. data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +198 -0
  40. data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +103 -0
  41. data/lib/aws-sdk-s3/encryptionV2/default_key_provider.rb +38 -0
  42. data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +66 -0
  43. data/lib/aws-sdk-s3/encryptionV2/errors.rb +13 -0
  44. data/lib/aws-sdk-s3/encryptionV2/io_auth_decrypter.rb +56 -0
  45. data/lib/aws-sdk-s3/encryptionV2/io_decrypter.rb +35 -0
  46. data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +71 -0
  47. data/lib/aws-sdk-s3/encryptionV2/key_provider.rb +29 -0
  48. data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +99 -0
  49. data/lib/aws-sdk-s3/encryptionV2/materials.rb +58 -0
  50. data/lib/aws-sdk-s3/encryptionV2/utils.rb +116 -0
  51. data/lib/aws-sdk-s3/encryption_v2.rb +20 -0
  52. data/lib/aws-sdk-s3/errors.rb +115 -0
  53. data/lib/aws-sdk-s3/event_streams.rb +69 -0
  54. data/lib/aws-sdk-s3/file_downloader.rb +142 -0
  55. data/lib/aws-sdk-s3/file_part.rb +78 -0
  56. data/lib/aws-sdk-s3/file_uploader.rb +70 -0
  57. data/lib/aws-sdk-s3/legacy_signer.rb +189 -0
  58. data/lib/aws-sdk-s3/multipart_file_uploader.rb +227 -0
  59. data/lib/aws-sdk-s3/multipart_stream_uploader.rb +173 -0
  60. data/lib/aws-sdk-s3/multipart_upload.rb +401 -0
  61. data/lib/aws-sdk-s3/multipart_upload_error.rb +18 -0
  62. data/lib/aws-sdk-s3/multipart_upload_part.rb +423 -0
  63. data/lib/aws-sdk-s3/object.rb +1422 -0
  64. data/lib/aws-sdk-s3/object_acl.rb +333 -0
  65. data/lib/aws-sdk-s3/object_copier.rb +101 -0
  66. data/lib/aws-sdk-s3/object_multipart_copier.rb +182 -0
  67. data/lib/aws-sdk-s3/object_summary.rb +1181 -0
  68. data/lib/aws-sdk-s3/object_version.rb +550 -0
  69. data/lib/aws-sdk-s3/plugins/accelerate.rb +87 -0
  70. data/lib/aws-sdk-s3/plugins/bucket_arn.rb +212 -0
  71. data/lib/aws-sdk-s3/plugins/bucket_dns.rb +91 -0
  72. data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +45 -0
  73. data/lib/aws-sdk-s3/plugins/dualstack.rb +74 -0
  74. data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +28 -0
  75. data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +25 -0
  76. data/lib/aws-sdk-s3/plugins/http_200_errors.rb +55 -0
  77. data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +62 -0
  78. data/lib/aws-sdk-s3/plugins/location_constraint.rb +35 -0
  79. data/lib/aws-sdk-s3/plugins/md5s.rb +84 -0
  80. data/lib/aws-sdk-s3/plugins/redirects.rb +45 -0
  81. data/lib/aws-sdk-s3/plugins/s3_host_id.rb +30 -0
  82. data/lib/aws-sdk-s3/plugins/s3_signer.rb +222 -0
  83. data/lib/aws-sdk-s3/plugins/sse_cpk.rb +70 -0
  84. data/lib/aws-sdk-s3/plugins/streaming_retry.rb +118 -0
  85. data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +97 -0
  86. data/lib/aws-sdk-s3/presigned_post.rb +686 -0
  87. data/lib/aws-sdk-s3/presigner.rb +253 -0
  88. data/lib/aws-sdk-s3/resource.rb +117 -0
  89. data/lib/aws-sdk-s3/types.rb +13154 -0
  90. data/lib/aws-sdk-s3/waiters.rb +243 -0
  91. metadata +184 -0
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module S3
5
+ class MultipartUploadError < StandardError
6
+
7
+ def initialize(message, errors)
8
+ @errors = errors
9
+ super(message)
10
+ end
11
+
12
+ # @return [Array<StandardError>] The list of errors encountered
13
+ # when uploading or aborting the upload.
14
+ attr_reader :errors
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,423 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::S3
11
+
12
+ class MultipartUploadPart
13
+
14
+ extend Aws::Deprecations
15
+
16
+ # @overload def initialize(bucket_name, object_key, multipart_upload_id, part_number, options = {})
17
+ # @param [String] bucket_name
18
+ # @param [String] object_key
19
+ # @param [String] multipart_upload_id
20
+ # @param [Integer] part_number
21
+ # @option options [Client] :client
22
+ # @overload def initialize(options = {})
23
+ # @option options [required, String] :bucket_name
24
+ # @option options [required, String] :object_key
25
+ # @option options [required, String] :multipart_upload_id
26
+ # @option options [required, Integer] :part_number
27
+ # @option options [Client] :client
28
+ def initialize(*args)
29
+ options = Hash === args.last ? args.pop.dup : {}
30
+ @bucket_name = extract_bucket_name(args, options)
31
+ @object_key = extract_object_key(args, options)
32
+ @multipart_upload_id = extract_multipart_upload_id(args, options)
33
+ @part_number = extract_part_number(args, options)
34
+ @data = options.delete(:data)
35
+ @client = options.delete(:client) || Client.new(options)
36
+ @waiter_block_warned = false
37
+ end
38
+
39
+ # @!group Read-Only Attributes
40
+
41
+ # @return [String]
42
+ def bucket_name
43
+ @bucket_name
44
+ end
45
+
46
+ # @return [String]
47
+ def object_key
48
+ @object_key
49
+ end
50
+
51
+ # @return [String]
52
+ def multipart_upload_id
53
+ @multipart_upload_id
54
+ end
55
+
56
+ # @return [Integer]
57
+ def part_number
58
+ @part_number
59
+ end
60
+
61
+ # Date and time at which the part was uploaded.
62
+ # @return [Time]
63
+ def last_modified
64
+ data[:last_modified]
65
+ end
66
+
67
+ # Entity tag returned when the part was uploaded.
68
+ # @return [String]
69
+ def etag
70
+ data[:etag]
71
+ end
72
+
73
+ # Size in bytes of the uploaded part data.
74
+ # @return [Integer]
75
+ def size
76
+ data[:size]
77
+ end
78
+
79
+ # @!endgroup
80
+
81
+ # @return [Client]
82
+ def client
83
+ @client
84
+ end
85
+
86
+ # @raise [NotImplementedError]
87
+ # @api private
88
+ def load
89
+ msg = "#load is not implemented, data only available via enumeration"
90
+ raise NotImplementedError, msg
91
+ end
92
+ alias :reload :load
93
+
94
+ # @raise [NotImplementedError] Raises when {#data_loaded?} is `false`.
95
+ # @return [Types::Part]
96
+ # Returns the data for this {MultipartUploadPart}.
97
+ def data
98
+ load unless @data
99
+ @data
100
+ end
101
+
102
+ # @return [Boolean]
103
+ # Returns `true` if this resource is loaded. Accessing attributes or
104
+ # {#data} on an unloaded resource will trigger a call to {#load}.
105
+ def data_loaded?
106
+ !!@data
107
+ end
108
+
109
+ # @deprecated Use [Aws::S3::Client] #wait_until instead
110
+ #
111
+ # Waiter polls an API operation until a resource enters a desired
112
+ # state.
113
+ #
114
+ # @note The waiting operation is performed on a copy. The original resource
115
+ # remains unchanged.
116
+ #
117
+ # ## Basic Usage
118
+ #
119
+ # Waiter will polls until it is successful, it fails by
120
+ # entering a terminal state, or until a maximum number of attempts
121
+ # are made.
122
+ #
123
+ # # polls in a loop until condition is true
124
+ # resource.wait_until(options) {|resource| condition}
125
+ #
126
+ # ## Example
127
+ #
128
+ # instance.wait_until(max_attempts:10, delay:5) do |instance|
129
+ # instance.state.name == 'running'
130
+ # end
131
+ #
132
+ # ## Configuration
133
+ #
134
+ # You can configure the maximum number of polling attempts, and the
135
+ # delay (in seconds) between each polling attempt. The waiting condition is
136
+ # set by passing a block to {#wait_until}:
137
+ #
138
+ # # poll for ~25 seconds
139
+ # resource.wait_until(max_attempts:5,delay:5) {|resource|...}
140
+ #
141
+ # ## Callbacks
142
+ #
143
+ # You can be notified before each polling attempt and before each
144
+ # delay. If you throw `:success` or `:failure` from these callbacks,
145
+ # it will terminate the waiter.
146
+ #
147
+ # started_at = Time.now
148
+ # # poll for 1 hour, instead of a number of attempts
149
+ # proc = Proc.new do |attempts, response|
150
+ # throw :failure if Time.now - started_at > 3600
151
+ # end
152
+ #
153
+ # # disable max attempts
154
+ # instance.wait_until(before_wait:proc, max_attempts:nil) {...}
155
+ #
156
+ # ## Handling Errors
157
+ #
158
+ # When a waiter is successful, it returns the Resource. When a waiter
159
+ # fails, it raises an error.
160
+ #
161
+ # begin
162
+ # resource.wait_until(...)
163
+ # rescue Aws::Waiters::Errors::WaiterFailed
164
+ # # resource did not enter the desired state in time
165
+ # end
166
+ #
167
+ # @yieldparam [Resource] resource to be used in the waiting condition.
168
+ #
169
+ # @raise [Aws::Waiters::Errors::FailureStateError] Raised when the waiter
170
+ # terminates because the waiter has entered a state that it will not
171
+ # transition out of, preventing success.
172
+ #
173
+ # yet successful.
174
+ #
175
+ # @raise [Aws::Waiters::Errors::UnexpectedError] Raised when an error is
176
+ # encountered while polling for a resource that is not expected.
177
+ #
178
+ # @raise [NotImplementedError] Raised when the resource does not
179
+ #
180
+ # @option options [Integer] :max_attempts (10) Maximum number of
181
+ # attempts
182
+ # @option options [Integer] :delay (10) Delay between each
183
+ # attempt in seconds
184
+ # @option options [Proc] :before_attempt (nil) Callback
185
+ # invoked before each attempt
186
+ # @option options [Proc] :before_wait (nil) Callback
187
+ # invoked before each wait
188
+ # @return [Resource] if the waiter was successful
189
+ def wait_until(options = {}, &block)
190
+ self_copy = self.dup
191
+ attempts = 0
192
+ options[:max_attempts] = 10 unless options.key?(:max_attempts)
193
+ options[:delay] ||= 10
194
+ options[:poller] = Proc.new do
195
+ attempts += 1
196
+ if block.call(self_copy)
197
+ [:success, self_copy]
198
+ else
199
+ self_copy.reload unless attempts == options[:max_attempts]
200
+ :retry
201
+ end
202
+ end
203
+ Aws::Waiters::Waiter.new(options).wait({})
204
+ end
205
+
206
+ # @!group Actions
207
+
208
+ # @example Request syntax with placeholder values
209
+ #
210
+ # multipart_upload_part.copy_from({
211
+ # copy_source: "CopySource", # required
212
+ # copy_source_if_match: "CopySourceIfMatch",
213
+ # copy_source_if_modified_since: Time.now,
214
+ # copy_source_if_none_match: "CopySourceIfNoneMatch",
215
+ # copy_source_if_unmodified_since: Time.now,
216
+ # copy_source_range: "CopySourceRange",
217
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
218
+ # sse_customer_key: "SSECustomerKey",
219
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
220
+ # copy_source_sse_customer_algorithm: "CopySourceSSECustomerAlgorithm",
221
+ # copy_source_sse_customer_key: "CopySourceSSECustomerKey",
222
+ # copy_source_sse_customer_key_md5: "CopySourceSSECustomerKeyMD5",
223
+ # request_payer: "requester", # accepts requester
224
+ # })
225
+ # @param [Hash] options ({})
226
+ # @option options [required, String] :copy_source
227
+ # The name of the source bucket and key name of the source object,
228
+ # separated by a slash (/). Must be URL-encoded.
229
+ # @option options [String] :copy_source_if_match
230
+ # Copies the object if its entity tag (ETag) matches the specified tag.
231
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_modified_since
232
+ # Copies the object if it has been modified since the specified time.
233
+ # @option options [String] :copy_source_if_none_match
234
+ # Copies the object if its entity tag (ETag) is different than the
235
+ # specified ETag.
236
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_unmodified_since
237
+ # Copies the object if it hasn't been modified since the specified
238
+ # time.
239
+ # @option options [String] :copy_source_range
240
+ # The range of bytes to copy from the source object. The range value
241
+ # must use the form bytes=first-last, where the first and last are the
242
+ # zero-based byte offsets to copy. For example, bytes=0-9 indicates that
243
+ # you want to copy the first 10 bytes of the source. You can copy a
244
+ # range only if the source object is greater than 5 MB.
245
+ # @option options [String] :sse_customer_algorithm
246
+ # Specifies the algorithm to use to when encrypting the object (for
247
+ # example, AES256).
248
+ # @option options [String] :sse_customer_key
249
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
250
+ # encrypting data. This value is used to store the object and then it is
251
+ # discarded; Amazon S3 does not store the encryption key. The key must
252
+ # be appropriate for use with the algorithm specified in the
253
+ # `x-amz-server-side​-encryption​-customer-algorithm` header. This must
254
+ # be the same encryption key specified in the initiate multipart upload
255
+ # request.
256
+ # @option options [String] :sse_customer_key_md5
257
+ # Specifies the 128-bit MD5 digest of the encryption key according to
258
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
259
+ # ensure that the encryption key was transmitted without error.
260
+ # @option options [String] :copy_source_sse_customer_algorithm
261
+ # Specifies the algorithm to use when decrypting the source object (for
262
+ # example, AES256).
263
+ # @option options [String] :copy_source_sse_customer_key
264
+ # Specifies the customer-provided encryption key for Amazon S3 to use to
265
+ # decrypt the source object. The encryption key provided in this header
266
+ # must be one that was used when the source object was created.
267
+ # @option options [String] :copy_source_sse_customer_key_md5
268
+ # Specifies the 128-bit MD5 digest of the encryption key according to
269
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
270
+ # ensure that the encryption key was transmitted without error.
271
+ # @option options [String] :request_payer
272
+ # Confirms that the requester knows that they will be charged for the
273
+ # request. Bucket owners need not specify this parameter in their
274
+ # requests. For information about downloading objects from requester
275
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
276
+ # in the *Amazon S3 Developer Guide*.
277
+ #
278
+ #
279
+ #
280
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
281
+ # @return [Types::UploadPartCopyOutput]
282
+ def copy_from(options = {})
283
+ options = options.merge(
284
+ bucket: @bucket_name,
285
+ key: @object_key,
286
+ upload_id: @multipart_upload_id,
287
+ part_number: @part_number
288
+ )
289
+ resp = @client.upload_part_copy(options)
290
+ resp.data
291
+ end
292
+
293
+ # @example Request syntax with placeholder values
294
+ #
295
+ # multipart_upload_part.upload({
296
+ # body: source_file,
297
+ # content_length: 1,
298
+ # content_md5: "ContentMD5",
299
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
300
+ # sse_customer_key: "SSECustomerKey",
301
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
302
+ # request_payer: "requester", # accepts requester
303
+ # })
304
+ # @param [Hash] options ({})
305
+ # @option options [String, IO] :body
306
+ # Object data.
307
+ # @option options [Integer] :content_length
308
+ # Size of the body in bytes. This parameter is useful when the size of
309
+ # the body cannot be determined automatically.
310
+ # @option options [String] :content_md5
311
+ # The base64-encoded 128-bit MD5 digest of the part data. This parameter
312
+ # is auto-populated when using the command from the CLI. This parameter
313
+ # is required if object lock parameters are specified.
314
+ # @option options [String] :sse_customer_algorithm
315
+ # Specifies the algorithm to use to when encrypting the object (for
316
+ # example, AES256).
317
+ # @option options [String] :sse_customer_key
318
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
319
+ # encrypting data. This value is used to store the object and then it is
320
+ # discarded; Amazon S3 does not store the encryption key. The key must
321
+ # be appropriate for use with the algorithm specified in the
322
+ # `x-amz-server-side​-encryption​-customer-algorithm header`. This must
323
+ # be the same encryption key specified in the initiate multipart upload
324
+ # request.
325
+ # @option options [String] :sse_customer_key_md5
326
+ # Specifies the 128-bit MD5 digest of the encryption key according to
327
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
328
+ # ensure that the encryption key was transmitted without error.
329
+ # @option options [String] :request_payer
330
+ # Confirms that the requester knows that they will be charged for the
331
+ # request. Bucket owners need not specify this parameter in their
332
+ # requests. For information about downloading objects from requester
333
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
334
+ # in the *Amazon S3 Developer Guide*.
335
+ #
336
+ #
337
+ #
338
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
339
+ # @return [Types::UploadPartOutput]
340
+ def upload(options = {})
341
+ options = options.merge(
342
+ bucket: @bucket_name,
343
+ key: @object_key,
344
+ upload_id: @multipart_upload_id,
345
+ part_number: @part_number
346
+ )
347
+ resp = @client.upload_part(options)
348
+ resp.data
349
+ end
350
+
351
+ # @!group Associations
352
+
353
+ # @return [MultipartUpload]
354
+ def multipart_upload
355
+ MultipartUpload.new(
356
+ bucket_name: @bucket_name,
357
+ object_key: @object_key,
358
+ id: @multipart_upload_id,
359
+ client: @client
360
+ )
361
+ end
362
+
363
+ # @deprecated
364
+ # @api private
365
+ def identifiers
366
+ {
367
+ bucket_name: @bucket_name,
368
+ object_key: @object_key,
369
+ multipart_upload_id: @multipart_upload_id,
370
+ part_number: @part_number
371
+ }
372
+ end
373
+ deprecated(:identifiers)
374
+
375
+ private
376
+
377
+ def extract_bucket_name(args, options)
378
+ value = args[0] || options.delete(:bucket_name)
379
+ case value
380
+ when String then value
381
+ when nil then raise ArgumentError, "missing required option :bucket_name"
382
+ else
383
+ msg = "expected :bucket_name to be a String, got #{value.class}"
384
+ raise ArgumentError, msg
385
+ end
386
+ end
387
+
388
+ def extract_object_key(args, options)
389
+ value = args[1] || options.delete(:object_key)
390
+ case value
391
+ when String then value
392
+ when nil then raise ArgumentError, "missing required option :object_key"
393
+ else
394
+ msg = "expected :object_key to be a String, got #{value.class}"
395
+ raise ArgumentError, msg
396
+ end
397
+ end
398
+
399
+ def extract_multipart_upload_id(args, options)
400
+ value = args[2] || options.delete(:multipart_upload_id)
401
+ case value
402
+ when String then value
403
+ when nil then raise ArgumentError, "missing required option :multipart_upload_id"
404
+ else
405
+ msg = "expected :multipart_upload_id to be a String, got #{value.class}"
406
+ raise ArgumentError, msg
407
+ end
408
+ end
409
+
410
+ def extract_part_number(args, options)
411
+ value = args[3] || options.delete(:part_number)
412
+ case value
413
+ when Integer then value
414
+ when nil then raise ArgumentError, "missing required option :part_number"
415
+ else
416
+ msg = "expected :part_number to be a Integer, got #{value.class}"
417
+ raise ArgumentError, msg
418
+ end
419
+ end
420
+
421
+ class Collection < Aws::Resources::Collection; end
422
+ end
423
+ end
@@ -0,0 +1,1422 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::S3
11
+
12
+ class Object
13
+
14
+ extend Aws::Deprecations
15
+
16
+ # @overload def initialize(bucket_name, key, options = {})
17
+ # @param [String] bucket_name
18
+ # @param [String] key
19
+ # @option options [Client] :client
20
+ # @overload def initialize(options = {})
21
+ # @option options [required, String] :bucket_name
22
+ # @option options [required, String] :key
23
+ # @option options [Client] :client
24
+ def initialize(*args)
25
+ options = Hash === args.last ? args.pop.dup : {}
26
+ @bucket_name = extract_bucket_name(args, options)
27
+ @key = extract_key(args, options)
28
+ @data = options.delete(:data)
29
+ @client = options.delete(:client) || Client.new(options)
30
+ @waiter_block_warned = false
31
+ end
32
+
33
+ # @!group Read-Only Attributes
34
+
35
+ # @return [String]
36
+ def bucket_name
37
+ @bucket_name
38
+ end
39
+
40
+ # @return [String]
41
+ def key
42
+ @key
43
+ end
44
+
45
+ # Specifies whether the object retrieved was (true) or was not (false) a
46
+ # Delete Marker. If false, this response header does not appear in the
47
+ # response.
48
+ # @return [Boolean]
49
+ def delete_marker
50
+ data[:delete_marker]
51
+ end
52
+
53
+ # Indicates that a range of bytes was specified.
54
+ # @return [String]
55
+ def accept_ranges
56
+ data[:accept_ranges]
57
+ end
58
+
59
+ # If the object expiration is configured (see PUT Bucket lifecycle), the
60
+ # response includes this header. It includes the expiry-date and rule-id
61
+ # key-value pairs providing object expiration information. The value of
62
+ # the rule-id is URL encoded.
63
+ # @return [String]
64
+ def expiration
65
+ data[:expiration]
66
+ end
67
+
68
+ # If the object is an archived object (an object whose storage class is
69
+ # GLACIER), the response includes this header if either the archive
70
+ # restoration is in progress (see RestoreObject or an archive copy is
71
+ # already restored.
72
+ #
73
+ # If an archive copy is already restored, the header value indicates
74
+ # when Amazon S3 is scheduled to delete the object copy. For example:
75
+ #
76
+ # `x-amz-restore: ongoing-request="false", expiry-date="Fri, 23 Dec 2012
77
+ # 00:00:00 GMT"`
78
+ #
79
+ # If the object restoration is in progress, the header returns the value
80
+ # `ongoing-request="true"`.
81
+ #
82
+ # For more information about archiving objects, see [Transitioning
83
+ # Objects: General Considerations][1].
84
+ #
85
+ #
86
+ #
87
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations
88
+ # @return [String]
89
+ def restore
90
+ data[:restore]
91
+ end
92
+
93
+ # Last modified date of the object
94
+ # @return [Time]
95
+ def last_modified
96
+ data[:last_modified]
97
+ end
98
+
99
+ # Size of the body in bytes.
100
+ # @return [Integer]
101
+ def content_length
102
+ data[:content_length]
103
+ end
104
+
105
+ # An ETag is an opaque identifier assigned by a web server to a specific
106
+ # version of a resource found at a URL.
107
+ # @return [String]
108
+ def etag
109
+ data[:etag]
110
+ end
111
+
112
+ # This is set to the number of metadata entries not returned in
113
+ # `x-amz-meta` headers. This can happen if you create metadata using an
114
+ # API like SOAP that supports more flexible metadata than the REST API.
115
+ # For example, using SOAP, you can create metadata whose values are not
116
+ # legal HTTP headers.
117
+ # @return [Integer]
118
+ def missing_meta
119
+ data[:missing_meta]
120
+ end
121
+
122
+ # Version of the object.
123
+ # @return [String]
124
+ def version_id
125
+ data[:version_id]
126
+ end
127
+
128
+ # Specifies caching behavior along the request/reply chain.
129
+ # @return [String]
130
+ def cache_control
131
+ data[:cache_control]
132
+ end
133
+
134
+ # Specifies presentational information for the object.
135
+ # @return [String]
136
+ def content_disposition
137
+ data[:content_disposition]
138
+ end
139
+
140
+ # Specifies what content encodings have been applied to the object and
141
+ # thus what decoding mechanisms must be applied to obtain the media-type
142
+ # referenced by the Content-Type header field.
143
+ # @return [String]
144
+ def content_encoding
145
+ data[:content_encoding]
146
+ end
147
+
148
+ # The language the content is in.
149
+ # @return [String]
150
+ def content_language
151
+ data[:content_language]
152
+ end
153
+
154
+ # A standard MIME type describing the format of the object data.
155
+ # @return [String]
156
+ def content_type
157
+ data[:content_type]
158
+ end
159
+
160
+ # The date and time at which the object is no longer cacheable.
161
+ # @return [Time]
162
+ def expires
163
+ data[:expires]
164
+ end
165
+
166
+ # @return [String]
167
+ def expires_string
168
+ data[:expires_string]
169
+ end
170
+
171
+ # If the bucket is configured as a website, redirects requests for this
172
+ # object to another object in the same bucket or to an external URL.
173
+ # Amazon S3 stores the value of this header in the object metadata.
174
+ # @return [String]
175
+ def website_redirect_location
176
+ data[:website_redirect_location]
177
+ end
178
+
179
+ # If the object is stored using server-side encryption either with an
180
+ # AWS KMS customer master key (CMK) or an Amazon S3-managed encryption
181
+ # key, the response includes this header with the value of the
182
+ # server-side encryption algorithm used when storing this object in
183
+ # Amazon S3 (for example, AES256, aws:kms).
184
+ # @return [String]
185
+ def server_side_encryption
186
+ data[:server_side_encryption]
187
+ end
188
+
189
+ # A map of metadata to store with the object in S3.
190
+ # @return [Hash<String,String>]
191
+ def metadata
192
+ data[:metadata]
193
+ end
194
+
195
+ # If server-side encryption with a customer-provided encryption key was
196
+ # requested, the response will include this header confirming the
197
+ # encryption algorithm used.
198
+ # @return [String]
199
+ def sse_customer_algorithm
200
+ data[:sse_customer_algorithm]
201
+ end
202
+
203
+ # If server-side encryption with a customer-provided encryption key was
204
+ # requested, the response will include this header to provide round-trip
205
+ # message integrity verification of the customer-provided encryption
206
+ # key.
207
+ # @return [String]
208
+ def sse_customer_key_md5
209
+ data[:sse_customer_key_md5]
210
+ end
211
+
212
+ # If present, specifies the ID of the AWS Key Management Service (AWS
213
+ # KMS) symmetric customer managed customer master key (CMK) that was
214
+ # used for the object.
215
+ # @return [String]
216
+ def ssekms_key_id
217
+ data[:ssekms_key_id]
218
+ end
219
+
220
+ # Provides storage class information of the object. Amazon S3 returns
221
+ # this header for all objects except for S3 Standard storage class
222
+ # objects.
223
+ #
224
+ # For more information, see [Storage Classes][1].
225
+ #
226
+ #
227
+ #
228
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html
229
+ # @return [String]
230
+ def storage_class
231
+ data[:storage_class]
232
+ end
233
+
234
+ # If present, indicates that the requester was successfully charged for
235
+ # the request.
236
+ # @return [String]
237
+ def request_charged
238
+ data[:request_charged]
239
+ end
240
+
241
+ # Amazon S3 can return this header if your request involves a bucket
242
+ # that is either a source or destination in a replication rule.
243
+ #
244
+ # In replication, you have a source bucket on which you configure
245
+ # replication and destination bucket where Amazon S3 stores object
246
+ # replicas. When you request an object (`GetObject`) or object metadata
247
+ # (`HeadObject`) from these buckets, Amazon S3 will return the
248
+ # `x-amz-replication-status` header in the response as follows:
249
+ #
250
+ # * If requesting an object from the source bucket — Amazon S3 will
251
+ # return the `x-amz-replication-status` header if the object in your
252
+ # request is eligible for replication.
253
+ #
254
+ # For example, suppose that in your replication configuration, you
255
+ # specify object prefix `TaxDocs` requesting Amazon S3 to replicate
256
+ # objects with key prefix `TaxDocs`. Any objects you upload with this
257
+ # key name prefix, for example `TaxDocs/document1.pdf`, are eligible
258
+ # for replication. For any object request with this key name prefix,
259
+ # Amazon S3 will return the `x-amz-replication-status` header with
260
+ # value PENDING, COMPLETED or FAILED indicating object replication
261
+ # status.
262
+ #
263
+ # * If requesting an object from the destination bucket — Amazon S3 will
264
+ # return the `x-amz-replication-status` header with value REPLICA if
265
+ # the object in your request is a replica that Amazon S3 created.
266
+ #
267
+ # For more information, see [Replication][1].
268
+ #
269
+ #
270
+ #
271
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
272
+ # @return [String]
273
+ def replication_status
274
+ data[:replication_status]
275
+ end
276
+
277
+ # The count of parts this object has.
278
+ # @return [Integer]
279
+ def parts_count
280
+ data[:parts_count]
281
+ end
282
+
283
+ # The Object Lock mode, if any, that's in effect for this object. This
284
+ # header is only returned if the requester has the
285
+ # `s3:GetObjectRetention` permission. For more information about S3
286
+ # Object Lock, see [Object Lock][1].
287
+ #
288
+ #
289
+ #
290
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html
291
+ # @return [String]
292
+ def object_lock_mode
293
+ data[:object_lock_mode]
294
+ end
295
+
296
+ # The date and time when the Object Lock retention period expires. This
297
+ # header is only returned if the requester has the
298
+ # `s3:GetObjectRetention` permission.
299
+ # @return [Time]
300
+ def object_lock_retain_until_date
301
+ data[:object_lock_retain_until_date]
302
+ end
303
+
304
+ # Specifies whether a legal hold is in effect for this object. This
305
+ # header is only returned if the requester has the
306
+ # `s3:GetObjectLegalHold` permission. This header is not returned if the
307
+ # specified version of this object has never had a legal hold applied.
308
+ # For more information about S3 Object Lock, see [Object Lock][1].
309
+ #
310
+ #
311
+ #
312
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html
313
+ # @return [String]
314
+ def object_lock_legal_hold_status
315
+ data[:object_lock_legal_hold_status]
316
+ end
317
+
318
+ # @!endgroup
319
+
320
+ # @return [Client]
321
+ def client
322
+ @client
323
+ end
324
+
325
+ # Loads, or reloads {#data} for the current {Object}.
326
+ # Returns `self` making it possible to chain methods.
327
+ #
328
+ # object.reload.data
329
+ #
330
+ # @return [self]
331
+ def load
332
+ resp = @client.head_object(
333
+ bucket: @bucket_name,
334
+ key: @key
335
+ )
336
+ @data = resp.data
337
+ self
338
+ end
339
+ alias :reload :load
340
+
341
+ # @return [Types::HeadObjectOutput]
342
+ # Returns the data for this {Object}. Calls
343
+ # {Client#head_object} if {#data_loaded?} is `false`.
344
+ def data
345
+ load unless @data
346
+ @data
347
+ end
348
+
349
+ # @return [Boolean]
350
+ # Returns `true` if this resource is loaded. Accessing attributes or
351
+ # {#data} on an unloaded resource will trigger a call to {#load}.
352
+ def data_loaded?
353
+ !!@data
354
+ end
355
+
356
+ # @param [Hash] options ({})
357
+ # @return [Boolean]
358
+ # Returns `true` if the Object exists.
359
+ def exists?(options = {})
360
+ begin
361
+ wait_until_exists(options.merge(max_attempts: 1))
362
+ true
363
+ rescue Aws::Waiters::Errors::UnexpectedError => e
364
+ raise e.error
365
+ rescue Aws::Waiters::Errors::WaiterFailed
366
+ false
367
+ end
368
+ end
369
+
370
+ # @param [Hash] options ({})
371
+ # @option options [Integer] :max_attempts (20)
372
+ # @option options [Float] :delay (5)
373
+ # @option options [Proc] :before_attempt
374
+ # @option options [Proc] :before_wait
375
+ # @return [Object]
376
+ def wait_until_exists(options = {}, &block)
377
+ options, params = separate_params_and_options(options)
378
+ waiter = Waiters::ObjectExists.new(options)
379
+ yield_waiter_and_warn(waiter, &block) if block_given?
380
+ waiter.wait(params.merge(bucket: @bucket_name,
381
+ key: @key))
382
+ Object.new({
383
+ bucket_name: @bucket_name,
384
+ key: @key,
385
+ client: @client
386
+ })
387
+ end
388
+
389
+ # @param [Hash] options ({})
390
+ # @option options [Integer] :max_attempts (20)
391
+ # @option options [Float] :delay (5)
392
+ # @option options [Proc] :before_attempt
393
+ # @option options [Proc] :before_wait
394
+ # @return [Object]
395
+ def wait_until_not_exists(options = {}, &block)
396
+ options, params = separate_params_and_options(options)
397
+ waiter = Waiters::ObjectNotExists.new(options)
398
+ yield_waiter_and_warn(waiter, &block) if block_given?
399
+ waiter.wait(params.merge(bucket: @bucket_name,
400
+ key: @key))
401
+ Object.new({
402
+ bucket_name: @bucket_name,
403
+ key: @key,
404
+ client: @client
405
+ })
406
+ end
407
+
408
+ # @deprecated Use [Aws::S3::Client] #wait_until instead
409
+ #
410
+ # Waiter polls an API operation until a resource enters a desired
411
+ # state.
412
+ #
413
+ # @note The waiting operation is performed on a copy. The original resource
414
+ # remains unchanged.
415
+ #
416
+ # ## Basic Usage
417
+ #
418
+ # Waiter will polls until it is successful, it fails by
419
+ # entering a terminal state, or until a maximum number of attempts
420
+ # are made.
421
+ #
422
+ # # polls in a loop until condition is true
423
+ # resource.wait_until(options) {|resource| condition}
424
+ #
425
+ # ## Example
426
+ #
427
+ # instance.wait_until(max_attempts:10, delay:5) do |instance|
428
+ # instance.state.name == 'running'
429
+ # end
430
+ #
431
+ # ## Configuration
432
+ #
433
+ # You can configure the maximum number of polling attempts, and the
434
+ # delay (in seconds) between each polling attempt. The waiting condition is
435
+ # set by passing a block to {#wait_until}:
436
+ #
437
+ # # poll for ~25 seconds
438
+ # resource.wait_until(max_attempts:5,delay:5) {|resource|...}
439
+ #
440
+ # ## Callbacks
441
+ #
442
+ # You can be notified before each polling attempt and before each
443
+ # delay. If you throw `:success` or `:failure` from these callbacks,
444
+ # it will terminate the waiter.
445
+ #
446
+ # started_at = Time.now
447
+ # # poll for 1 hour, instead of a number of attempts
448
+ # proc = Proc.new do |attempts, response|
449
+ # throw :failure if Time.now - started_at > 3600
450
+ # end
451
+ #
452
+ # # disable max attempts
453
+ # instance.wait_until(before_wait:proc, max_attempts:nil) {...}
454
+ #
455
+ # ## Handling Errors
456
+ #
457
+ # When a waiter is successful, it returns the Resource. When a waiter
458
+ # fails, it raises an error.
459
+ #
460
+ # begin
461
+ # resource.wait_until(...)
462
+ # rescue Aws::Waiters::Errors::WaiterFailed
463
+ # # resource did not enter the desired state in time
464
+ # end
465
+ #
466
+ # @yieldparam [Resource] resource to be used in the waiting condition.
467
+ #
468
+ # @raise [Aws::Waiters::Errors::FailureStateError] Raised when the waiter
469
+ # terminates because the waiter has entered a state that it will not
470
+ # transition out of, preventing success.
471
+ #
472
+ # yet successful.
473
+ #
474
+ # @raise [Aws::Waiters::Errors::UnexpectedError] Raised when an error is
475
+ # encountered while polling for a resource that is not expected.
476
+ #
477
+ # @raise [NotImplementedError] Raised when the resource does not
478
+ #
479
+ # @option options [Integer] :max_attempts (10) Maximum number of
480
+ # attempts
481
+ # @option options [Integer] :delay (10) Delay between each
482
+ # attempt in seconds
483
+ # @option options [Proc] :before_attempt (nil) Callback
484
+ # invoked before each attempt
485
+ # @option options [Proc] :before_wait (nil) Callback
486
+ # invoked before each wait
487
+ # @return [Resource] if the waiter was successful
488
+ def wait_until(options = {}, &block)
489
+ self_copy = self.dup
490
+ attempts = 0
491
+ options[:max_attempts] = 10 unless options.key?(:max_attempts)
492
+ options[:delay] ||= 10
493
+ options[:poller] = Proc.new do
494
+ attempts += 1
495
+ if block.call(self_copy)
496
+ [:success, self_copy]
497
+ else
498
+ self_copy.reload unless attempts == options[:max_attempts]
499
+ :retry
500
+ end
501
+ end
502
+ Aws::Waiters::Waiter.new(options).wait({})
503
+ end
504
+
505
+ # @!group Actions
506
+
507
+ # @example Request syntax with placeholder values
508
+ #
509
+ # object.copy_from({
510
+ # acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
511
+ # cache_control: "CacheControl",
512
+ # content_disposition: "ContentDisposition",
513
+ # content_encoding: "ContentEncoding",
514
+ # content_language: "ContentLanguage",
515
+ # content_type: "ContentType",
516
+ # copy_source: "CopySource", # required
517
+ # copy_source_if_match: "CopySourceIfMatch",
518
+ # copy_source_if_modified_since: Time.now,
519
+ # copy_source_if_none_match: "CopySourceIfNoneMatch",
520
+ # copy_source_if_unmodified_since: Time.now,
521
+ # expires: Time.now,
522
+ # grant_full_control: "GrantFullControl",
523
+ # grant_read: "GrantRead",
524
+ # grant_read_acp: "GrantReadACP",
525
+ # grant_write_acp: "GrantWriteACP",
526
+ # metadata: {
527
+ # "MetadataKey" => "MetadataValue",
528
+ # },
529
+ # metadata_directive: "COPY", # accepts COPY, REPLACE
530
+ # tagging_directive: "COPY", # accepts COPY, REPLACE
531
+ # server_side_encryption: "AES256", # accepts AES256, aws:kms
532
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
533
+ # website_redirect_location: "WebsiteRedirectLocation",
534
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
535
+ # sse_customer_key: "SSECustomerKey",
536
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
537
+ # ssekms_key_id: "SSEKMSKeyId",
538
+ # ssekms_encryption_context: "SSEKMSEncryptionContext",
539
+ # copy_source_sse_customer_algorithm: "CopySourceSSECustomerAlgorithm",
540
+ # copy_source_sse_customer_key: "CopySourceSSECustomerKey",
541
+ # copy_source_sse_customer_key_md5: "CopySourceSSECustomerKeyMD5",
542
+ # request_payer: "requester", # accepts requester
543
+ # tagging: "TaggingHeader",
544
+ # object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
545
+ # object_lock_retain_until_date: Time.now,
546
+ # object_lock_legal_hold_status: "ON", # accepts ON, OFF
547
+ # })
548
+ # @param [Hash] options ({})
549
+ # @option options [String] :acl
550
+ # The canned ACL to apply to the object.
551
+ # @option options [String] :cache_control
552
+ # Specifies caching behavior along the request/reply chain.
553
+ # @option options [String] :content_disposition
554
+ # Specifies presentational information for the object.
555
+ # @option options [String] :content_encoding
556
+ # Specifies what content encodings have been applied to the object and
557
+ # thus what decoding mechanisms must be applied to obtain the media-type
558
+ # referenced by the Content-Type header field.
559
+ # @option options [String] :content_language
560
+ # The language the content is in.
561
+ # @option options [String] :content_type
562
+ # A standard MIME type describing the format of the object data.
563
+ # @option options [required, String] :copy_source
564
+ # The name of the source bucket and key name of the source object,
565
+ # separated by a slash (/). Must be URL-encoded.
566
+ # @option options [String] :copy_source_if_match
567
+ # Copies the object if its entity tag (ETag) matches the specified tag.
568
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_modified_since
569
+ # Copies the object if it has been modified since the specified time.
570
+ # @option options [String] :copy_source_if_none_match
571
+ # Copies the object if its entity tag (ETag) is different than the
572
+ # specified ETag.
573
+ # @option options [Time,DateTime,Date,Integer,String] :copy_source_if_unmodified_since
574
+ # Copies the object if it hasn't been modified since the specified
575
+ # time.
576
+ # @option options [Time,DateTime,Date,Integer,String] :expires
577
+ # The date and time at which the object is no longer cacheable.
578
+ # @option options [String] :grant_full_control
579
+ # Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
580
+ # object.
581
+ # @option options [String] :grant_read
582
+ # Allows grantee to read the object data and its metadata.
583
+ # @option options [String] :grant_read_acp
584
+ # Allows grantee to read the object ACL.
585
+ # @option options [String] :grant_write_acp
586
+ # Allows grantee to write the ACL for the applicable object.
587
+ # @option options [Hash<String,String>] :metadata
588
+ # A map of metadata to store with the object in S3.
589
+ # @option options [String] :metadata_directive
590
+ # Specifies whether the metadata is copied from the source object or
591
+ # replaced with metadata provided in the request.
592
+ # @option options [String] :tagging_directive
593
+ # Specifies whether the object tag-set are copied from the source object
594
+ # or replaced with tag-set provided in the request.
595
+ # @option options [String] :server_side_encryption
596
+ # The server-side encryption algorithm used when storing this object in
597
+ # Amazon S3 (for example, AES256, aws:kms).
598
+ # @option options [String] :storage_class
599
+ # The type of storage to use for the object. Defaults to 'STANDARD'.
600
+ # @option options [String] :website_redirect_location
601
+ # If the bucket is configured as a website, redirects requests for this
602
+ # object to another object in the same bucket or to an external URL.
603
+ # Amazon S3 stores the value of this header in the object metadata.
604
+ # @option options [String] :sse_customer_algorithm
605
+ # Specifies the algorithm to use to when encrypting the object (for
606
+ # example, AES256).
607
+ # @option options [String] :sse_customer_key
608
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
609
+ # encrypting data. This value is used to store the object and then it is
610
+ # discarded; Amazon S3 does not store the encryption key. The key must
611
+ # be appropriate for use with the algorithm specified in the
612
+ # `x-amz-server-side​-encryption​-customer-algorithm` header.
613
+ # @option options [String] :sse_customer_key_md5
614
+ # Specifies the 128-bit MD5 digest of the encryption key according to
615
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
616
+ # ensure that the encryption key was transmitted without error.
617
+ # @option options [String] :ssekms_key_id
618
+ # Specifies the AWS KMS key ID to use for object encryption. All GET and
619
+ # PUT requests for an object protected by AWS KMS will fail if not made
620
+ # via SSL or using SigV4. For information about configuring using any of
621
+ # the officially supported AWS SDKs and AWS CLI, see [Specifying the
622
+ # Signature Version in Request Authentication][1] in the *Amazon S3
623
+ # Developer Guide*.
624
+ #
625
+ #
626
+ #
627
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
628
+ # @option options [String] :ssekms_encryption_context
629
+ # Specifies the AWS KMS Encryption Context to use for object encryption.
630
+ # The value of this header is a base64-encoded UTF-8 string holding JSON
631
+ # with the encryption context key-value pairs.
632
+ # @option options [String] :copy_source_sse_customer_algorithm
633
+ # Specifies the algorithm to use when decrypting the source object (for
634
+ # example, AES256).
635
+ # @option options [String] :copy_source_sse_customer_key
636
+ # Specifies the customer-provided encryption key for Amazon S3 to use to
637
+ # decrypt the source object. The encryption key provided in this header
638
+ # must be one that was used when the source object was created.
639
+ # @option options [String] :copy_source_sse_customer_key_md5
640
+ # Specifies the 128-bit MD5 digest of the encryption key according to
641
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
642
+ # ensure that the encryption key was transmitted without error.
643
+ # @option options [String] :request_payer
644
+ # Confirms that the requester knows that they will be charged for the
645
+ # request. Bucket owners need not specify this parameter in their
646
+ # requests. For information about downloading objects from requester
647
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
648
+ # in the *Amazon S3 Developer Guide*.
649
+ #
650
+ #
651
+ #
652
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
653
+ # @option options [String] :tagging
654
+ # The tag-set for the object destination object this value must be used
655
+ # in conjunction with the `TaggingDirective`. The tag-set must be
656
+ # encoded as URL Query parameters.
657
+ # @option options [String] :object_lock_mode
658
+ # The Object Lock mode that you want to apply to the copied object.
659
+ # @option options [Time,DateTime,Date,Integer,String] :object_lock_retain_until_date
660
+ # The date and time when you want the copied object's Object Lock to
661
+ # expire.
662
+ # @option options [String] :object_lock_legal_hold_status
663
+ # Specifies whether you want to apply a Legal Hold to the copied object.
664
+ # @return [Types::CopyObjectOutput]
665
+ def copy_from(options = {})
666
+ options = options.merge(
667
+ bucket: @bucket_name,
668
+ key: @key
669
+ )
670
+ resp = @client.copy_object(options)
671
+ resp.data
672
+ end
673
+
674
+ # @example Request syntax with placeholder values
675
+ #
676
+ # object.delete({
677
+ # mfa: "MFA",
678
+ # version_id: "ObjectVersionId",
679
+ # request_payer: "requester", # accepts requester
680
+ # bypass_governance_retention: false,
681
+ # })
682
+ # @param [Hash] options ({})
683
+ # @option options [String] :mfa
684
+ # The concatenation of the authentication device's serial number, a
685
+ # space, and the value that is displayed on your authentication device.
686
+ # Required to permanently delete a versioned object if versioning is
687
+ # configured with MFA delete enabled.
688
+ # @option options [String] :version_id
689
+ # VersionId used to reference a specific version of the object.
690
+ # @option options [String] :request_payer
691
+ # Confirms that the requester knows that they will be charged for the
692
+ # request. Bucket owners need not specify this parameter in their
693
+ # requests. For information about downloading objects from requester
694
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
695
+ # in the *Amazon S3 Developer Guide*.
696
+ #
697
+ #
698
+ #
699
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
700
+ # @option options [Boolean] :bypass_governance_retention
701
+ # Indicates whether S3 Object Lock should bypass Governance-mode
702
+ # restrictions to process this operation.
703
+ # @return [Types::DeleteObjectOutput]
704
+ def delete(options = {})
705
+ options = options.merge(
706
+ bucket: @bucket_name,
707
+ key: @key
708
+ )
709
+ resp = @client.delete_object(options)
710
+ resp.data
711
+ end
712
+
713
+ # @example Request syntax with placeholder values
714
+ #
715
+ # object.get({
716
+ # if_match: "IfMatch",
717
+ # if_modified_since: Time.now,
718
+ # if_none_match: "IfNoneMatch",
719
+ # if_unmodified_since: Time.now,
720
+ # range: "Range",
721
+ # response_cache_control: "ResponseCacheControl",
722
+ # response_content_disposition: "ResponseContentDisposition",
723
+ # response_content_encoding: "ResponseContentEncoding",
724
+ # response_content_language: "ResponseContentLanguage",
725
+ # response_content_type: "ResponseContentType",
726
+ # response_expires: Time.now,
727
+ # version_id: "ObjectVersionId",
728
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
729
+ # sse_customer_key: "SSECustomerKey",
730
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
731
+ # request_payer: "requester", # accepts requester
732
+ # part_number: 1,
733
+ # })
734
+ # @param [Hash] options ({})
735
+ # @option options [String] :if_match
736
+ # Return the object only if its entity tag (ETag) is the same as the one
737
+ # specified, otherwise return a 412 (precondition failed).
738
+ # @option options [Time,DateTime,Date,Integer,String] :if_modified_since
739
+ # Return the object only if it has been modified since the specified
740
+ # time, otherwise return a 304 (not modified).
741
+ # @option options [String] :if_none_match
742
+ # Return the object only if its entity tag (ETag) is different from the
743
+ # one specified, otherwise return a 304 (not modified).
744
+ # @option options [Time,DateTime,Date,Integer,String] :if_unmodified_since
745
+ # Return the object only if it has not been modified since the specified
746
+ # time, otherwise return a 412 (precondition failed).
747
+ # @option options [String] :range
748
+ # Downloads the specified range bytes of an object. For more information
749
+ # about the HTTP Range header, see
750
+ # [https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35][1].
751
+ #
752
+ # <note markdown="1"> Amazon S3 doesn't support retrieving multiple ranges of data per
753
+ # `GET` request.
754
+ #
755
+ # </note>
756
+ #
757
+ #
758
+ #
759
+ # [1]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35
760
+ # @option options [String] :response_cache_control
761
+ # Sets the `Cache-Control` header of the response.
762
+ # @option options [String] :response_content_disposition
763
+ # Sets the `Content-Disposition` header of the response
764
+ # @option options [String] :response_content_encoding
765
+ # Sets the `Content-Encoding` header of the response.
766
+ # @option options [String] :response_content_language
767
+ # Sets the `Content-Language` header of the response.
768
+ # @option options [String] :response_content_type
769
+ # Sets the `Content-Type` header of the response.
770
+ # @option options [Time,DateTime,Date,Integer,String] :response_expires
771
+ # Sets the `Expires` header of the response.
772
+ # @option options [String] :version_id
773
+ # VersionId used to reference a specific version of the object.
774
+ # @option options [String] :sse_customer_algorithm
775
+ # Specifies the algorithm to use to when encrypting the object (for
776
+ # example, AES256).
777
+ # @option options [String] :sse_customer_key
778
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
779
+ # encrypting data. This value is used to store the object and then it is
780
+ # discarded; Amazon S3 does not store the encryption key. The key must
781
+ # be appropriate for use with the algorithm specified in the
782
+ # `x-amz-server-side​-encryption​-customer-algorithm` header.
783
+ # @option options [String] :sse_customer_key_md5
784
+ # Specifies the 128-bit MD5 digest of the encryption key according to
785
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
786
+ # ensure that the encryption key was transmitted without error.
787
+ # @option options [String] :request_payer
788
+ # Confirms that the requester knows that they will be charged for the
789
+ # request. Bucket owners need not specify this parameter in their
790
+ # requests. For information about downloading objects from requester
791
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
792
+ # in the *Amazon S3 Developer Guide*.
793
+ #
794
+ #
795
+ #
796
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
797
+ # @option options [Integer] :part_number
798
+ # Part number of the object being read. This is a positive integer
799
+ # between 1 and 10,000. Effectively performs a 'ranged' GET request
800
+ # for the part specified. Useful for downloading just a part of an
801
+ # object.
802
+ # @return [Types::GetObjectOutput]
803
+ def get(options = {}, &block)
804
+ options = options.merge(
805
+ bucket: @bucket_name,
806
+ key: @key
807
+ )
808
+ resp = @client.get_object(options, &block)
809
+ resp.data
810
+ end
811
+
812
+ # @example Request syntax with placeholder values
813
+ #
814
+ # multipartupload = object.initiate_multipart_upload({
815
+ # acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
816
+ # cache_control: "CacheControl",
817
+ # content_disposition: "ContentDisposition",
818
+ # content_encoding: "ContentEncoding",
819
+ # content_language: "ContentLanguage",
820
+ # content_type: "ContentType",
821
+ # expires: Time.now,
822
+ # grant_full_control: "GrantFullControl",
823
+ # grant_read: "GrantRead",
824
+ # grant_read_acp: "GrantReadACP",
825
+ # grant_write_acp: "GrantWriteACP",
826
+ # metadata: {
827
+ # "MetadataKey" => "MetadataValue",
828
+ # },
829
+ # server_side_encryption: "AES256", # accepts AES256, aws:kms
830
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
831
+ # website_redirect_location: "WebsiteRedirectLocation",
832
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
833
+ # sse_customer_key: "SSECustomerKey",
834
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
835
+ # ssekms_key_id: "SSEKMSKeyId",
836
+ # ssekms_encryption_context: "SSEKMSEncryptionContext",
837
+ # request_payer: "requester", # accepts requester
838
+ # tagging: "TaggingHeader",
839
+ # object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
840
+ # object_lock_retain_until_date: Time.now,
841
+ # object_lock_legal_hold_status: "ON", # accepts ON, OFF
842
+ # })
843
+ # @param [Hash] options ({})
844
+ # @option options [String] :acl
845
+ # The canned ACL to apply to the object.
846
+ # @option options [String] :cache_control
847
+ # Specifies caching behavior along the request/reply chain.
848
+ # @option options [String] :content_disposition
849
+ # Specifies presentational information for the object.
850
+ # @option options [String] :content_encoding
851
+ # Specifies what content encodings have been applied to the object and
852
+ # thus what decoding mechanisms must be applied to obtain the media-type
853
+ # referenced by the Content-Type header field.
854
+ # @option options [String] :content_language
855
+ # The language the content is in.
856
+ # @option options [String] :content_type
857
+ # A standard MIME type describing the format of the object data.
858
+ # @option options [Time,DateTime,Date,Integer,String] :expires
859
+ # The date and time at which the object is no longer cacheable.
860
+ # @option options [String] :grant_full_control
861
+ # Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
862
+ # object.
863
+ # @option options [String] :grant_read
864
+ # Allows grantee to read the object data and its metadata.
865
+ # @option options [String] :grant_read_acp
866
+ # Allows grantee to read the object ACL.
867
+ # @option options [String] :grant_write_acp
868
+ # Allows grantee to write the ACL for the applicable object.
869
+ # @option options [Hash<String,String>] :metadata
870
+ # A map of metadata to store with the object in S3.
871
+ # @option options [String] :server_side_encryption
872
+ # The server-side encryption algorithm used when storing this object in
873
+ # Amazon S3 (for example, AES256, aws:kms).
874
+ # @option options [String] :storage_class
875
+ # The type of storage to use for the object. Defaults to 'STANDARD'.
876
+ # @option options [String] :website_redirect_location
877
+ # If the bucket is configured as a website, redirects requests for this
878
+ # object to another object in the same bucket or to an external URL.
879
+ # Amazon S3 stores the value of this header in the object metadata.
880
+ # @option options [String] :sse_customer_algorithm
881
+ # Specifies the algorithm to use to when encrypting the object (for
882
+ # example, AES256).
883
+ # @option options [String] :sse_customer_key
884
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
885
+ # encrypting data. This value is used to store the object and then it is
886
+ # discarded; Amazon S3 does not store the encryption key. The key must
887
+ # be appropriate for use with the algorithm specified in the
888
+ # `x-amz-server-side​-encryption​-customer-algorithm` header.
889
+ # @option options [String] :sse_customer_key_md5
890
+ # Specifies the 128-bit MD5 digest of the encryption key according to
891
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
892
+ # ensure that the encryption key was transmitted without error.
893
+ # @option options [String] :ssekms_key_id
894
+ # Specifies the ID of the symmetric customer managed AWS KMS CMK to use
895
+ # for object encryption. All GET and PUT requests for an object
896
+ # protected by AWS KMS will fail if not made via SSL or using SigV4. For
897
+ # information about configuring using any of the officially supported
898
+ # AWS SDKs and AWS CLI, see [Specifying the Signature Version in Request
899
+ # Authentication][1] in the *Amazon S3 Developer Guide*.
900
+ #
901
+ #
902
+ #
903
+ # [1]: https://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
904
+ # @option options [String] :ssekms_encryption_context
905
+ # Specifies the AWS KMS Encryption Context to use for object encryption.
906
+ # The value of this header is a base64-encoded UTF-8 string holding JSON
907
+ # with the encryption context key-value pairs.
908
+ # @option options [String] :request_payer
909
+ # Confirms that the requester knows that they will be charged for the
910
+ # request. Bucket owners need not specify this parameter in their
911
+ # requests. For information about downloading objects from requester
912
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
913
+ # in the *Amazon S3 Developer Guide*.
914
+ #
915
+ #
916
+ #
917
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
918
+ # @option options [String] :tagging
919
+ # The tag-set for the object. The tag-set must be encoded as URL Query
920
+ # parameters.
921
+ # @option options [String] :object_lock_mode
922
+ # Specifies the Object Lock mode that you want to apply to the uploaded
923
+ # object.
924
+ # @option options [Time,DateTime,Date,Integer,String] :object_lock_retain_until_date
925
+ # Specifies the date and time when you want the Object Lock to expire.
926
+ # @option options [String] :object_lock_legal_hold_status
927
+ # Specifies whether you want to apply a Legal Hold to the uploaded
928
+ # object.
929
+ # @return [MultipartUpload]
930
+ def initiate_multipart_upload(options = {})
931
+ options = options.merge(
932
+ bucket: @bucket_name,
933
+ key: @key
934
+ )
935
+ resp = @client.create_multipart_upload(options)
936
+ MultipartUpload.new(
937
+ bucket_name: @bucket_name,
938
+ object_key: @key,
939
+ id: resp.data.upload_id,
940
+ client: @client
941
+ )
942
+ end
943
+
944
+ # @example Request syntax with placeholder values
945
+ #
946
+ # object.put({
947
+ # acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
948
+ # body: source_file,
949
+ # cache_control: "CacheControl",
950
+ # content_disposition: "ContentDisposition",
951
+ # content_encoding: "ContentEncoding",
952
+ # content_language: "ContentLanguage",
953
+ # content_length: 1,
954
+ # content_md5: "ContentMD5",
955
+ # content_type: "ContentType",
956
+ # expires: Time.now,
957
+ # grant_full_control: "GrantFullControl",
958
+ # grant_read: "GrantRead",
959
+ # grant_read_acp: "GrantReadACP",
960
+ # grant_write_acp: "GrantWriteACP",
961
+ # metadata: {
962
+ # "MetadataKey" => "MetadataValue",
963
+ # },
964
+ # server_side_encryption: "AES256", # accepts AES256, aws:kms
965
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
966
+ # website_redirect_location: "WebsiteRedirectLocation",
967
+ # sse_customer_algorithm: "SSECustomerAlgorithm",
968
+ # sse_customer_key: "SSECustomerKey",
969
+ # sse_customer_key_md5: "SSECustomerKeyMD5",
970
+ # ssekms_key_id: "SSEKMSKeyId",
971
+ # ssekms_encryption_context: "SSEKMSEncryptionContext",
972
+ # request_payer: "requester", # accepts requester
973
+ # tagging: "TaggingHeader",
974
+ # object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
975
+ # object_lock_retain_until_date: Time.now,
976
+ # object_lock_legal_hold_status: "ON", # accepts ON, OFF
977
+ # })
978
+ # @param [Hash] options ({})
979
+ # @option options [String] :acl
980
+ # The canned ACL to apply to the object. For more information, see
981
+ # [Canned ACL][1].
982
+ #
983
+ #
984
+ #
985
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL
986
+ # @option options [String, IO] :body
987
+ # Object data.
988
+ # @option options [String] :cache_control
989
+ # Can be used to specify caching behavior along the request/reply chain.
990
+ # For more information, see
991
+ # [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9][1].
992
+ #
993
+ #
994
+ #
995
+ # [1]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
996
+ # @option options [String] :content_disposition
997
+ # Specifies presentational information for the object. For more
998
+ # information, see
999
+ # [http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1][1].
1000
+ #
1001
+ #
1002
+ #
1003
+ # [1]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1
1004
+ # @option options [String] :content_encoding
1005
+ # Specifies what content encodings have been applied to the object and
1006
+ # thus what decoding mechanisms must be applied to obtain the media-type
1007
+ # referenced by the Content-Type header field. For more information, see
1008
+ # [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11][1].
1009
+ #
1010
+ #
1011
+ #
1012
+ # [1]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11
1013
+ # @option options [String] :content_language
1014
+ # The language the content is in.
1015
+ # @option options [Integer] :content_length
1016
+ # Size of the body in bytes. This parameter is useful when the size of
1017
+ # the body cannot be determined automatically. For more information, see
1018
+ # [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13][1].
1019
+ #
1020
+ #
1021
+ #
1022
+ # [1]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
1023
+ # @option options [String] :content_md5
1024
+ # The base64-encoded 128-bit MD5 digest of the message (without the
1025
+ # headers) according to RFC 1864. This header can be used as a message
1026
+ # integrity check to verify that the data is the same data that was
1027
+ # originally sent. Although it is optional, we recommend using the
1028
+ # Content-MD5 mechanism as an end-to-end integrity check. For more
1029
+ # information about REST request authentication, see [REST
1030
+ # Authentication][1].
1031
+ #
1032
+ #
1033
+ #
1034
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
1035
+ # @option options [String] :content_type
1036
+ # A standard MIME type describing the format of the contents. For more
1037
+ # information, see
1038
+ # [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17][1].
1039
+ #
1040
+ #
1041
+ #
1042
+ # [1]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17
1043
+ # @option options [Time,DateTime,Date,Integer,String] :expires
1044
+ # The date and time at which the object is no longer cacheable. For more
1045
+ # information, see
1046
+ # [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21][1].
1047
+ #
1048
+ #
1049
+ #
1050
+ # [1]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21
1051
+ # @option options [String] :grant_full_control
1052
+ # Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
1053
+ # object.
1054
+ # @option options [String] :grant_read
1055
+ # Allows grantee to read the object data and its metadata.
1056
+ # @option options [String] :grant_read_acp
1057
+ # Allows grantee to read the object ACL.
1058
+ # @option options [String] :grant_write_acp
1059
+ # Allows grantee to write the ACL for the applicable object.
1060
+ # @option options [Hash<String,String>] :metadata
1061
+ # A map of metadata to store with the object in S3.
1062
+ # @option options [String] :server_side_encryption
1063
+ # The server-side encryption algorithm used when storing this object in
1064
+ # Amazon S3 (for example, AES256, aws:kms).
1065
+ # @option options [String] :storage_class
1066
+ # If you don't specify, S3 Standard is the default storage class.
1067
+ # Amazon S3 supports other storage classes.
1068
+ # @option options [String] :website_redirect_location
1069
+ # If the bucket is configured as a website, redirects requests for this
1070
+ # object to another object in the same bucket or to an external URL.
1071
+ # Amazon S3 stores the value of this header in the object metadata. For
1072
+ # information about object metadata, see [Object Key and Metadata][1].
1073
+ #
1074
+ # In the following example, the request header sets the redirect to an
1075
+ # object (anotherPage.html) in the same bucket:
1076
+ #
1077
+ # `x-amz-website-redirect-location: /anotherPage.html`
1078
+ #
1079
+ # In the following example, the request header sets the object redirect
1080
+ # to another website:
1081
+ #
1082
+ # `x-amz-website-redirect-location: http://www.example.com/`
1083
+ #
1084
+ # For more information about website hosting in Amazon S3, see [Hosting
1085
+ # Websites on Amazon S3][2] and [How to Configure Website Page
1086
+ # Redirects][3].
1087
+ #
1088
+ #
1089
+ #
1090
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
1091
+ # [2]: https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html
1092
+ # [3]: https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html
1093
+ # @option options [String] :sse_customer_algorithm
1094
+ # Specifies the algorithm to use to when encrypting the object (for
1095
+ # example, AES256).
1096
+ # @option options [String] :sse_customer_key
1097
+ # Specifies the customer-provided encryption key for Amazon S3 to use in
1098
+ # encrypting data. This value is used to store the object and then it is
1099
+ # discarded; Amazon S3 does not store the encryption key. The key must
1100
+ # be appropriate for use with the algorithm specified in the
1101
+ # `x-amz-server-side​-encryption​-customer-algorithm` header.
1102
+ # @option options [String] :sse_customer_key_md5
1103
+ # Specifies the 128-bit MD5 digest of the encryption key according to
1104
+ # RFC 1321. Amazon S3 uses this header for a message integrity check to
1105
+ # ensure that the encryption key was transmitted without error.
1106
+ # @option options [String] :ssekms_key_id
1107
+ # If `x-amz-server-side-encryption` is present and has the value of
1108
+ # `aws:kms`, this header specifies the ID of the AWS Key Management
1109
+ # Service (AWS KMS) symmetrical customer managed customer master key
1110
+ # (CMK) that was used for the object.
1111
+ #
1112
+ # If the value of `x-amz-server-side-encryption` is `aws:kms`, this
1113
+ # header specifies the ID of the symmetric customer managed AWS KMS CMK
1114
+ # that will be used for the object. If you specify
1115
+ # `x-amz-server-side-encryption:aws:kms`, but do not provide`
1116
+ # x-amz-server-side-encryption-aws-kms-key-id`, Amazon S3 uses the AWS
1117
+ # managed CMK in AWS to protect the data.
1118
+ # @option options [String] :ssekms_encryption_context
1119
+ # Specifies the AWS KMS Encryption Context to use for object encryption.
1120
+ # The value of this header is a base64-encoded UTF-8 string holding JSON
1121
+ # with the encryption context key-value pairs.
1122
+ # @option options [String] :request_payer
1123
+ # Confirms that the requester knows that they will be charged for the
1124
+ # request. Bucket owners need not specify this parameter in their
1125
+ # requests. For information about downloading objects from requester
1126
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
1127
+ # in the *Amazon S3 Developer Guide*.
1128
+ #
1129
+ #
1130
+ #
1131
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
1132
+ # @option options [String] :tagging
1133
+ # The tag-set for the object. The tag-set must be encoded as URL Query
1134
+ # parameters. (For example, "Key1=Value1")
1135
+ # @option options [String] :object_lock_mode
1136
+ # The Object Lock mode that you want to apply to this object.
1137
+ # @option options [Time,DateTime,Date,Integer,String] :object_lock_retain_until_date
1138
+ # The date and time when you want this object's Object Lock to expire.
1139
+ # @option options [String] :object_lock_legal_hold_status
1140
+ # Specifies whether a legal hold will be applied to this object. For
1141
+ # more information about S3 Object Lock, see [Object Lock][1].
1142
+ #
1143
+ #
1144
+ #
1145
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html
1146
+ # @return [Types::PutObjectOutput]
1147
+ def put(options = {})
1148
+ options = options.merge(
1149
+ bucket: @bucket_name,
1150
+ key: @key
1151
+ )
1152
+ resp = @client.put_object(options)
1153
+ resp.data
1154
+ end
1155
+
1156
+ # @example Request syntax with placeholder values
1157
+ #
1158
+ # object.restore_object({
1159
+ # version_id: "ObjectVersionId",
1160
+ # restore_request: {
1161
+ # days: 1,
1162
+ # glacier_job_parameters: {
1163
+ # tier: "Standard", # required, accepts Standard, Bulk, Expedited
1164
+ # },
1165
+ # type: "SELECT", # accepts SELECT
1166
+ # tier: "Standard", # accepts Standard, Bulk, Expedited
1167
+ # description: "Description",
1168
+ # select_parameters: {
1169
+ # input_serialization: { # required
1170
+ # csv: {
1171
+ # file_header_info: "USE", # accepts USE, IGNORE, NONE
1172
+ # comments: "Comments",
1173
+ # quote_escape_character: "QuoteEscapeCharacter",
1174
+ # record_delimiter: "RecordDelimiter",
1175
+ # field_delimiter: "FieldDelimiter",
1176
+ # quote_character: "QuoteCharacter",
1177
+ # allow_quoted_record_delimiter: false,
1178
+ # },
1179
+ # compression_type: "NONE", # accepts NONE, GZIP, BZIP2
1180
+ # json: {
1181
+ # type: "DOCUMENT", # accepts DOCUMENT, LINES
1182
+ # },
1183
+ # parquet: {
1184
+ # },
1185
+ # },
1186
+ # expression_type: "SQL", # required, accepts SQL
1187
+ # expression: "Expression", # required
1188
+ # output_serialization: { # required
1189
+ # csv: {
1190
+ # quote_fields: "ALWAYS", # accepts ALWAYS, ASNEEDED
1191
+ # quote_escape_character: "QuoteEscapeCharacter",
1192
+ # record_delimiter: "RecordDelimiter",
1193
+ # field_delimiter: "FieldDelimiter",
1194
+ # quote_character: "QuoteCharacter",
1195
+ # },
1196
+ # json: {
1197
+ # record_delimiter: "RecordDelimiter",
1198
+ # },
1199
+ # },
1200
+ # },
1201
+ # output_location: {
1202
+ # s3: {
1203
+ # bucket_name: "BucketName", # required
1204
+ # prefix: "LocationPrefix", # required
1205
+ # encryption: {
1206
+ # encryption_type: "AES256", # required, accepts AES256, aws:kms
1207
+ # kms_key_id: "SSEKMSKeyId",
1208
+ # kms_context: "KMSContext",
1209
+ # },
1210
+ # canned_acl: "private", # accepts private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control
1211
+ # access_control_list: [
1212
+ # {
1213
+ # grantee: {
1214
+ # display_name: "DisplayName",
1215
+ # email_address: "EmailAddress",
1216
+ # id: "ID",
1217
+ # type: "CanonicalUser", # required, accepts CanonicalUser, AmazonCustomerByEmail, Group
1218
+ # uri: "URI",
1219
+ # },
1220
+ # permission: "FULL_CONTROL", # accepts FULL_CONTROL, WRITE, WRITE_ACP, READ, READ_ACP
1221
+ # },
1222
+ # ],
1223
+ # tagging: {
1224
+ # tag_set: [ # required
1225
+ # {
1226
+ # key: "ObjectKey", # required
1227
+ # value: "Value", # required
1228
+ # },
1229
+ # ],
1230
+ # },
1231
+ # user_metadata: [
1232
+ # {
1233
+ # name: "MetadataKey",
1234
+ # value: "MetadataValue",
1235
+ # },
1236
+ # ],
1237
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
1238
+ # },
1239
+ # },
1240
+ # },
1241
+ # request_payer: "requester", # accepts requester
1242
+ # })
1243
+ # @param [Hash] options ({})
1244
+ # @option options [String] :version_id
1245
+ # VersionId used to reference a specific version of the object.
1246
+ # @option options [Types::RestoreRequest] :restore_request
1247
+ # Container for restore job parameters.
1248
+ # @option options [String] :request_payer
1249
+ # Confirms that the requester knows that they will be charged for the
1250
+ # request. Bucket owners need not specify this parameter in their
1251
+ # requests. For information about downloading objects from requester
1252
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
1253
+ # in the *Amazon S3 Developer Guide*.
1254
+ #
1255
+ #
1256
+ #
1257
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
1258
+ # @return [Types::RestoreObjectOutput]
1259
+ def restore_object(options = {})
1260
+ options = options.merge(
1261
+ bucket: @bucket_name,
1262
+ key: @key
1263
+ )
1264
+ resp = @client.restore_object(options)
1265
+ resp.data
1266
+ end
1267
+
1268
+ # @!group Associations
1269
+
1270
+ # @return [ObjectAcl]
1271
+ def acl
1272
+ ObjectAcl.new(
1273
+ bucket_name: @bucket_name,
1274
+ object_key: @key,
1275
+ client: @client
1276
+ )
1277
+ end
1278
+
1279
+ # @return [Bucket]
1280
+ def bucket
1281
+ Bucket.new(
1282
+ name: @bucket_name,
1283
+ client: @client
1284
+ )
1285
+ end
1286
+
1287
+ # @param [String] id
1288
+ # @return [MultipartUpload]
1289
+ def multipart_upload(id)
1290
+ MultipartUpload.new(
1291
+ bucket_name: @bucket_name,
1292
+ object_key: @key,
1293
+ id: id,
1294
+ client: @client
1295
+ )
1296
+ end
1297
+
1298
+ # @param [String] id
1299
+ # @return [ObjectVersion]
1300
+ def version(id)
1301
+ ObjectVersion.new(
1302
+ bucket_name: @bucket_name,
1303
+ object_key: @key,
1304
+ id: id,
1305
+ client: @client
1306
+ )
1307
+ end
1308
+
1309
+ # @deprecated
1310
+ # @api private
1311
+ def identifiers
1312
+ {
1313
+ bucket_name: @bucket_name,
1314
+ key: @key
1315
+ }
1316
+ end
1317
+ deprecated(:identifiers)
1318
+
1319
+ private
1320
+
1321
+ def extract_bucket_name(args, options)
1322
+ value = args[0] || options.delete(:bucket_name)
1323
+ case value
1324
+ when String then value
1325
+ when nil then raise ArgumentError, "missing required option :bucket_name"
1326
+ else
1327
+ msg = "expected :bucket_name to be a String, got #{value.class}"
1328
+ raise ArgumentError, msg
1329
+ end
1330
+ end
1331
+
1332
+ def extract_key(args, options)
1333
+ value = args[1] || options.delete(:key)
1334
+ case value
1335
+ when String then value
1336
+ when nil then raise ArgumentError, "missing required option :key"
1337
+ else
1338
+ msg = "expected :key to be a String, got #{value.class}"
1339
+ raise ArgumentError, msg
1340
+ end
1341
+ end
1342
+
1343
+ def yield_waiter_and_warn(waiter, &block)
1344
+ if !@waiter_block_warned
1345
+ msg = "pass options to configure the waiter; "\
1346
+ "yielding the waiter is deprecated"
1347
+ warn(msg)
1348
+ @waiter_block_warned = true
1349
+ end
1350
+ yield(waiter.waiter)
1351
+ end
1352
+
1353
+ def separate_params_and_options(options)
1354
+ opts = Set.new(
1355
+ [:client, :max_attempts, :delay, :before_attempt, :before_wait]
1356
+ )
1357
+ waiter_opts = {}
1358
+ waiter_params = {}
1359
+ options.each_pair do |key, value|
1360
+ if opts.include?(key)
1361
+ waiter_opts[key] = value
1362
+ else
1363
+ waiter_params[key] = value
1364
+ end
1365
+ end
1366
+ waiter_opts[:client] ||= @client
1367
+ [waiter_opts, waiter_params]
1368
+ end
1369
+
1370
+ class Collection < Aws::Resources::Collection
1371
+
1372
+ # @!group Batch Actions
1373
+
1374
+ # @example Request syntax with placeholder values
1375
+ #
1376
+ # object.batch_delete!({
1377
+ # mfa: "MFA",
1378
+ # request_payer: "requester", # accepts requester
1379
+ # bypass_governance_retention: false,
1380
+ # })
1381
+ # @param options ({})
1382
+ # @option options [String] :mfa
1383
+ # The concatenation of the authentication device's serial number, a
1384
+ # space, and the value that is displayed on your authentication device.
1385
+ # Required to permanently delete a versioned object if versioning is
1386
+ # configured with MFA delete enabled.
1387
+ # @option options [String] :request_payer
1388
+ # Confirms that the requester knows that they will be charged for the
1389
+ # request. Bucket owners need not specify this parameter in their
1390
+ # requests. For information about downloading objects from requester
1391
+ # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
1392
+ # in the *Amazon S3 Developer Guide*.
1393
+ #
1394
+ #
1395
+ #
1396
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
1397
+ # @option options [Boolean] :bypass_governance_retention
1398
+ # Specifies whether you want to delete this object even if it has a
1399
+ # Governance-type Object Lock in place. You must have sufficient
1400
+ # permissions to perform this operation.
1401
+ # @return [void]
1402
+ def batch_delete!(options = {})
1403
+ batch_enum.each do |batch|
1404
+ params = Aws::Util.copy_hash(options)
1405
+ params[:bucket] = batch[0].bucket_name
1406
+ params[:delete] ||= {}
1407
+ params[:delete][:objects] ||= []
1408
+ batch.each do |item|
1409
+ params[:delete][:objects] << {
1410
+ key: item.key
1411
+ }
1412
+ end
1413
+ batch[0].client.delete_objects(params)
1414
+ end
1415
+ nil
1416
+ end
1417
+
1418
+ # @!endgroup
1419
+
1420
+ end
1421
+ end
1422
+ end