aws-sdk-s3 1.103.0 → 1.143.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +288 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-s3/bucket.rb +590 -100
- data/lib/aws-sdk-s3/bucket_acl.rb +28 -6
- data/lib/aws-sdk-s3/bucket_cors.rb +34 -10
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +38 -12
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +42 -12
- data/lib/aws-sdk-s3/bucket_logging.rb +35 -6
- data/lib/aws-sdk-s3/bucket_notification.rb +27 -9
- data/lib/aws-sdk-s3/bucket_policy.rb +78 -10
- data/lib/aws-sdk-s3/bucket_request_payment.rb +28 -6
- data/lib/aws-sdk-s3/bucket_tagging.rb +34 -10
- data/lib/aws-sdk-s3/bucket_versioning.rb +72 -14
- data/lib/aws-sdk-s3/bucket_website.rb +34 -10
- data/lib/aws-sdk-s3/client.rb +7917 -3171
- data/lib/aws-sdk-s3/client_api.rb +709 -224
- data/lib/aws-sdk-s3/customizations/bucket.rb +23 -47
- data/lib/aws-sdk-s3/customizations/errors.rb +27 -0
- data/lib/aws-sdk-s3/customizations/object.rb +171 -22
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +7 -0
- data/lib/aws-sdk-s3/encryption/client.rb +6 -2
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +13 -9
- data/lib/aws-sdk-s3/encryptionV2/client.rb +6 -2
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +1 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +10 -6
- data/lib/aws-sdk-s3/endpoint_parameters.rb +178 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +591 -0
- data/lib/aws-sdk-s3/endpoints.rb +2590 -0
- data/lib/aws-sdk-s3/express_credentials.rb +55 -0
- data/lib/aws-sdk-s3/express_credentials_cache.rb +30 -0
- data/lib/aws-sdk-s3/express_credentials_provider.rb +36 -0
- data/lib/aws-sdk-s3/file_downloader.rb +170 -45
- data/lib/aws-sdk-s3/file_uploader.rb +11 -4
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +26 -8
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +41 -14
- data/lib/aws-sdk-s3/multipart_upload.rb +194 -19
- data/lib/aws-sdk-s3/multipart_upload_part.rb +280 -30
- data/lib/aws-sdk-s3/object.rb +1735 -266
- data/lib/aws-sdk-s3/object_acl.rb +49 -13
- data/lib/aws-sdk-s3/object_copier.rb +7 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +41 -19
- data/lib/aws-sdk-s3/object_summary.rb +1497 -221
- data/lib/aws-sdk-s3/object_version.rb +365 -58
- data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -44
- data/lib/aws-sdk-s3/plugins/arn.rb +0 -197
- data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -39
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
- data/lib/aws-sdk-s3/plugins/dualstack.rb +1 -55
- data/lib/aws-sdk-s3/plugins/endpoints.rb +274 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +2 -1
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +91 -0
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +6 -29
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +3 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +6 -3
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +35 -109
- data/lib/aws-sdk-s3/plugins/skip_whole_multipart_get_checksums.rb +31 -0
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +23 -2
- data/lib/aws-sdk-s3/presigned_post.rb +99 -78
- data/lib/aws-sdk-s3/presigner.rb +26 -37
- data/lib/aws-sdk-s3/resource.rb +97 -3
- data/lib/aws-sdk-s3/types.rb +6618 -4880
- data/lib/aws-sdk-s3.rb +5 -1
- data/sig/bucket.rbs +212 -0
- data/sig/bucket_acl.rbs +78 -0
- data/sig/bucket_cors.rbs +69 -0
- data/sig/bucket_lifecycle.rbs +88 -0
- data/sig/bucket_lifecycle_configuration.rbs +111 -0
- data/sig/bucket_logging.rbs +76 -0
- data/sig/bucket_notification.rbs +114 -0
- data/sig/bucket_policy.rbs +59 -0
- data/sig/bucket_request_payment.rbs +54 -0
- data/sig/bucket_tagging.rbs +65 -0
- data/sig/bucket_versioning.rbs +77 -0
- data/sig/bucket_website.rbs +93 -0
- data/sig/client.rbs +2360 -0
- data/sig/errors.rbs +34 -0
- data/sig/multipart_upload.rbs +110 -0
- data/sig/multipart_upload_part.rbs +105 -0
- data/sig/object.rbs +436 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +334 -0
- data/sig/object_version.rbs +131 -0
- data/sig/resource.rbs +124 -0
- data/sig/types.rbs +2562 -0
- data/sig/waiters.rbs +83 -0
- metadata +45 -16
- data/lib/aws-sdk-s3/arn/access_point_arn.rb +0 -69
- data/lib/aws-sdk-s3/arn/multi_region_access_point_arn.rb +0 -69
- data/lib/aws-sdk-s3/arn/object_lambda_arn.rb +0 -69
- data/lib/aws-sdk-s3/arn/outpost_access_point_arn.rb +0 -73
- data/lib/aws-sdk-s3/plugins/object_lambda_endpoint.rb +0 -25
@@ -56,6 +56,10 @@ module Aws::S3
|
|
56
56
|
|
57
57
|
# If present, indicates that the requester was successfully charged for
|
58
58
|
# the request.
|
59
|
+
#
|
60
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
61
|
+
#
|
62
|
+
# </note>
|
59
63
|
# @return [String]
|
60
64
|
def request_charged
|
61
65
|
data[:request_charged]
|
@@ -75,10 +79,12 @@ module Aws::S3
|
|
75
79
|
#
|
76
80
|
# @return [self]
|
77
81
|
def load
|
78
|
-
resp =
|
82
|
+
resp = Aws::Plugins::UserAgent.feature('resource') do
|
83
|
+
@client.get_object_acl(
|
79
84
|
bucket: @bucket_name,
|
80
85
|
key: @object_key
|
81
86
|
)
|
87
|
+
end
|
82
88
|
@data = resp.data
|
83
89
|
self
|
84
90
|
end
|
@@ -193,7 +199,9 @@ module Aws::S3
|
|
193
199
|
:retry
|
194
200
|
end
|
195
201
|
end
|
196
|
-
Aws::
|
202
|
+
Aws::Plugins::UserAgent.feature('resource') do
|
203
|
+
Aws::Waiters::Waiter.new(options).wait({})
|
204
|
+
end
|
197
205
|
end
|
198
206
|
|
199
207
|
# @!group Actions
|
@@ -221,6 +229,7 @@ module Aws::S3
|
|
221
229
|
# },
|
222
230
|
# },
|
223
231
|
# content_md5: "ContentMD5",
|
232
|
+
# checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256
|
224
233
|
# grant_full_control: "GrantFullControl",
|
225
234
|
# grant_read: "GrantRead",
|
226
235
|
# grant_read_acp: "GrantReadACP",
|
@@ -254,19 +263,34 @@ module Aws::S3
|
|
254
263
|
#
|
255
264
|
#
|
256
265
|
# [1]: http://www.ietf.org/rfc/rfc1864.txt
|
266
|
+
# @option options [String] :checksum_algorithm
|
267
|
+
# Indicates the algorithm used to create the checksum for the object
|
268
|
+
# when you use the SDK. This header will not provide any additional
|
269
|
+
# functionality if you don't use the SDK. When you send this header,
|
270
|
+
# there must be a corresponding `x-amz-checksum` or `x-amz-trailer`
|
271
|
+
# header sent. Otherwise, Amazon S3 fails the request with the HTTP
|
272
|
+
# status code `400 Bad Request`. For more information, see [Checking
|
273
|
+
# object integrity][1] in the *Amazon S3 User Guide*.
|
274
|
+
#
|
275
|
+
# If you provide an individual checksum, Amazon S3 ignores any provided
|
276
|
+
# `ChecksumAlgorithm` parameter.
|
277
|
+
#
|
278
|
+
#
|
279
|
+
#
|
280
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
257
281
|
# @option options [String] :grant_full_control
|
258
282
|
# Allows grantee the read, write, read ACP, and write ACP permissions on
|
259
283
|
# the bucket.
|
260
284
|
#
|
261
|
-
# This
|
285
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
262
286
|
# @option options [String] :grant_read
|
263
287
|
# Allows grantee to list the objects in the bucket.
|
264
288
|
#
|
265
|
-
# This
|
289
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
266
290
|
# @option options [String] :grant_read_acp
|
267
291
|
# Allows grantee to read the bucket ACL.
|
268
292
|
#
|
269
|
-
# This
|
293
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
270
294
|
# @option options [String] :grant_write
|
271
295
|
# Allows grantee to create new objects in the bucket.
|
272
296
|
#
|
@@ -275,30 +299,42 @@ module Aws::S3
|
|
275
299
|
# @option options [String] :grant_write_acp
|
276
300
|
# Allows grantee to write the ACL for the applicable bucket.
|
277
301
|
#
|
278
|
-
# This
|
302
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
279
303
|
# @option options [String] :request_payer
|
280
304
|
# Confirms that the requester knows that they will be charged for the
|
281
305
|
# request. Bucket owners need not specify this parameter in their
|
282
|
-
# requests.
|
283
|
-
#
|
306
|
+
# requests. If either the source or destination S3 bucket has Requester
|
307
|
+
# Pays enabled, the requester will pay for corresponding charges to copy
|
308
|
+
# the object. For information about downloading objects from Requester
|
309
|
+
# Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
|
284
310
|
# in the *Amazon S3 User Guide*.
|
285
311
|
#
|
312
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
313
|
+
#
|
314
|
+
# </note>
|
315
|
+
#
|
286
316
|
#
|
287
317
|
#
|
288
318
|
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
|
289
319
|
# @option options [String] :version_id
|
290
|
-
#
|
320
|
+
# Version ID used to reference a specific version of the object.
|
321
|
+
#
|
322
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
323
|
+
#
|
324
|
+
# </note>
|
291
325
|
# @option options [String] :expected_bucket_owner
|
292
|
-
# The account ID of the expected bucket owner. If the
|
293
|
-
#
|
294
|
-
#
|
326
|
+
# The account ID of the expected bucket owner. If the account ID that
|
327
|
+
# you provide does not match the actual owner of the bucket, the request
|
328
|
+
# fails with the HTTP status code `403 Forbidden` (access denied).
|
295
329
|
# @return [Types::PutObjectAclOutput]
|
296
330
|
def put(options = {})
|
297
331
|
options = options.merge(
|
298
332
|
bucket: @bucket_name,
|
299
333
|
key: @object_key
|
300
334
|
)
|
301
|
-
resp =
|
335
|
+
resp = Aws::Plugins::UserAgent.feature('resource') do
|
336
|
+
@client.put_object_acl(options)
|
337
|
+
end
|
302
338
|
resp.data
|
303
339
|
end
|
304
340
|
|
@@ -28,11 +28,13 @@ module Aws
|
|
28
28
|
options[:bucket] = target_bucket
|
29
29
|
options[:key] = target_key
|
30
30
|
options[:copy_source] = copy_source(source)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
Aws::Plugins::UserAgent.feature('s3-transfer') do
|
32
|
+
if options.delete(:multipart_copy)
|
33
|
+
apply_source_client(source, options)
|
34
|
+
ObjectMultipartCopier.new(@options).copy(options)
|
35
|
+
else
|
36
|
+
@object.client.copy_object(options)
|
37
|
+
end
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
@@ -15,12 +15,18 @@ module Aws
|
|
15
15
|
MAX_PARTS = 10_000
|
16
16
|
|
17
17
|
# @option options [Client] :client
|
18
|
-
# @option [Integer] :min_part_size (52428800)
|
19
|
-
# Defaults to 50MB.
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
18
|
+
# @option options [Integer] :min_part_size (52428800)
|
19
|
+
# Size of copied parts. Defaults to 50MB.
|
20
|
+
# @option options [Integer] :thread_count (10) Number of concurrent
|
21
|
+
# threads to use for copying parts.
|
22
|
+
# @option options [Boolean] :use_source_parts (false) Use part sizes
|
23
|
+
# defined on the source object if any exist. If copying or moving an
|
24
|
+
# object that is already multipart, this does not re-part the object,
|
25
|
+
# instead re-using the part definitions on the original. That means
|
26
|
+
# the etag and any checksums will not change. This is especially
|
27
|
+
# useful if the source object has parts with varied sizes.
|
23
28
|
def initialize(options = {})
|
29
|
+
@use_source_parts = options.delete(:use_source_parts) || false
|
24
30
|
@thread_count = options.delete(:thread_count) || 10
|
25
31
|
@min_part_size = options.delete(:min_part_size) || (FIVE_MB * 10)
|
26
32
|
@client = options[:client] || Client.new
|
@@ -31,8 +37,9 @@ module Aws
|
|
31
37
|
|
32
38
|
# @option (see S3::Client#copy_object)
|
33
39
|
def copy(options = {})
|
34
|
-
|
35
|
-
|
40
|
+
metadata = source_metadata(options)
|
41
|
+
size = metadata[:content_length]
|
42
|
+
options[:upload_id] = initiate_upload(metadata.merge(options))
|
36
43
|
begin
|
37
44
|
parts = copy_parts(size, default_part_size(size), options)
|
38
45
|
complete_upload(parts, options)
|
@@ -74,10 +81,9 @@ module Aws
|
|
74
81
|
end
|
75
82
|
|
76
83
|
def copy_part(part)
|
77
|
-
{
|
78
|
-
|
79
|
-
|
80
|
-
}
|
84
|
+
@client.upload_part_copy(part).copy_part_result.to_h.merge({
|
85
|
+
part_number: part[:part_number]
|
86
|
+
}).tap { |result| result.delete(:last_modified) }
|
81
87
|
end
|
82
88
|
|
83
89
|
def complete_upload(parts, options)
|
@@ -100,26 +106,41 @@ module Aws
|
|
100
106
|
parts = []
|
101
107
|
options = options_for(:upload_part_copy, options)
|
102
108
|
while offset < size
|
109
|
+
part_size = calculate_part_size(part_number, default_part_size, options)
|
103
110
|
parts << options.merge({
|
104
111
|
part_number: part_number,
|
105
|
-
copy_source_range: byte_range(offset,
|
112
|
+
copy_source_range: byte_range(offset, part_size, size),
|
106
113
|
})
|
107
114
|
part_number += 1
|
108
|
-
offset +=
|
115
|
+
offset += part_size
|
109
116
|
end
|
110
117
|
parts
|
111
118
|
end
|
112
119
|
|
113
|
-
def byte_range(offset,
|
114
|
-
if offset +
|
115
|
-
"bytes=#{offset}-#{offset +
|
120
|
+
def byte_range(offset, part_size, size)
|
121
|
+
if offset + part_size < size
|
122
|
+
"bytes=#{offset}-#{offset + part_size - 1}"
|
116
123
|
else
|
117
124
|
"bytes=#{offset}-#{size - 1}"
|
118
125
|
end
|
119
126
|
end
|
120
127
|
|
121
|
-
def
|
122
|
-
|
128
|
+
def calculate_part_size(part_number, default_part_size, options)
|
129
|
+
if @use_source_parts && source_has_parts(options)
|
130
|
+
source_metadata(options.merge({ part_number: part_number }))[:content_length]
|
131
|
+
else
|
132
|
+
default_part_size
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def source_has_parts(options)
|
137
|
+
@source_has_parts ||= source_metadata(options.merge({ part_number: 1 }))[:parts_count]
|
138
|
+
end
|
139
|
+
|
140
|
+
def source_metadata(options)
|
141
|
+
if options[:content_length]
|
142
|
+
return { content_length: options.delete(:content_length) }
|
143
|
+
end
|
123
144
|
|
124
145
|
client = options[:copy_source_client] || @client
|
125
146
|
|
@@ -132,7 +153,8 @@ module Aws
|
|
132
153
|
key = CGI.unescape(key)
|
133
154
|
opts = { bucket: bucket, key: key }
|
134
155
|
opts[:version_id] = version_id if version_id
|
135
|
-
|
156
|
+
opts[:part_number] = options[:part_number] if options[:part_number]
|
157
|
+
client.head_object(opts).to_h
|
136
158
|
end
|
137
159
|
|
138
160
|
def default_part_size(source_size)
|