aws-sdk-s3 1.79.1 → 1.212.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1548 -0
- data/LICENSE.txt +202 -0
- data/VERSION +1 -0
- data/lib/aws-sdk-s3/access_grants_credentials.rb +57 -0
- data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +250 -0
- data/lib/aws-sdk-s3/bucket.rb +900 -98
- data/lib/aws-sdk-s3/bucket_acl.rb +44 -10
- data/lib/aws-sdk-s3/bucket_cors.rb +51 -11
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +53 -8
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +107 -9
- data/lib/aws-sdk-s3/bucket_logging.rb +43 -6
- data/lib/aws-sdk-s3/bucket_notification.rb +32 -9
- data/lib/aws-sdk-s3/bucket_policy.rb +90 -6
- data/lib/aws-sdk-s3/bucket_region_cache.rb +9 -5
- data/lib/aws-sdk-s3/bucket_request_payment.rb +38 -8
- data/lib/aws-sdk-s3/bucket_tagging.rb +46 -7
- data/lib/aws-sdk-s3/bucket_versioning.rb +127 -9
- data/lib/aws-sdk-s3/bucket_website.rb +46 -7
- data/lib/aws-sdk-s3/client.rb +13729 -3146
- data/lib/aws-sdk-s3/client_api.rb +1604 -277
- data/lib/aws-sdk-s3/customizations/bucket.rb +31 -47
- data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
- data/lib/aws-sdk-s3/customizations/object.rb +253 -82
- data/lib/aws-sdk-s3/customizations/object_summary.rb +5 -0
- data/lib/aws-sdk-s3/customizations/object_version.rb +13 -0
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +28 -29
- data/lib/aws-sdk-s3/default_executor.rb +103 -0
- data/lib/aws-sdk-s3/encryption/client.rb +9 -5
- data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +0 -4
- data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +2 -0
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +15 -9
- data/lib/aws-sdk-s3/encryptionV2/client.rb +105 -26
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +7 -165
- data/lib/aws-sdk-s3/encryptionV2/decryption.rb +205 -0
- data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +20 -3
- data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +2 -4
- data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +18 -6
- data/lib/aws-sdk-s3/encryptionV2/utils.rb +5 -0
- data/lib/aws-sdk-s3/encryptionV3/client.rb +885 -0
- data/lib/aws-sdk-s3/encryptionV3/decrypt_handler.rb +98 -0
- data/lib/aws-sdk-s3/encryptionV3/decryption.rb +244 -0
- data/lib/aws-sdk-s3/encryptionV3/default_cipher_provider.rb +159 -0
- data/lib/aws-sdk-s3/encryptionV3/default_key_provider.rb +35 -0
- data/lib/aws-sdk-s3/encryptionV3/encrypt_handler.rb +98 -0
- data/lib/aws-sdk-s3/encryptionV3/errors.rb +47 -0
- data/lib/aws-sdk-s3/encryptionV3/io_auth_decrypter.rb +60 -0
- data/lib/aws-sdk-s3/encryptionV3/io_decrypter.rb +35 -0
- data/lib/aws-sdk-s3/encryptionV3/io_encrypter.rb +84 -0
- data/lib/aws-sdk-s3/encryptionV3/key_provider.rb +28 -0
- data/lib/aws-sdk-s3/encryptionV3/kms_cipher_provider.rb +159 -0
- data/lib/aws-sdk-s3/encryptionV3/materials.rb +58 -0
- data/lib/aws-sdk-s3/encryptionV3/utils.rb +321 -0
- data/lib/aws-sdk-s3/encryption_v2.rb +1 -0
- data/lib/aws-sdk-s3/encryption_v3.rb +24 -0
- data/lib/aws-sdk-s3/endpoint_parameters.rb +181 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +889 -0
- data/lib/aws-sdk-s3/endpoints.rb +1544 -0
- data/lib/aws-sdk-s3/errors.rb +80 -1
- data/lib/aws-sdk-s3/event_streams.rb +1 -1
- data/lib/aws-sdk-s3/express_credentials.rb +55 -0
- data/lib/aws-sdk-s3/express_credentials_provider.rb +59 -0
- data/lib/aws-sdk-s3/file_downloader.rb +258 -82
- data/lib/aws-sdk-s3/file_uploader.rb +25 -14
- data/lib/aws-sdk-s3/legacy_signer.rb +17 -26
- data/lib/aws-sdk-s3/multipart_download_error.rb +8 -0
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +111 -86
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +110 -92
- data/lib/aws-sdk-s3/multipart_upload.rb +304 -14
- data/lib/aws-sdk-s3/multipart_upload_error.rb +3 -4
- data/lib/aws-sdk-s3/multipart_upload_part.rb +344 -20
- data/lib/aws-sdk-s3/object.rb +2457 -225
- data/lib/aws-sdk-s3/object_acl.rb +76 -15
- data/lib/aws-sdk-s3/object_copier.rb +7 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +48 -23
- data/lib/aws-sdk-s3/object_summary.rb +2033 -169
- data/lib/aws-sdk-s3/object_version.rb +470 -53
- data/lib/aws-sdk-s3/plugins/accelerate.rb +1 -39
- data/lib/aws-sdk-s3/plugins/access_grants.rb +178 -0
- data/lib/aws-sdk-s3/plugins/arn.rb +70 -0
- data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -41
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
- data/lib/aws-sdk-s3/plugins/checksum_algorithm.rb +44 -0
- data/lib/aws-sdk-s3/plugins/dualstack.rb +2 -49
- data/lib/aws-sdk-s3/plugins/endpoints.rb +86 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +3 -1
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +88 -0
- data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +1 -1
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +87 -26
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +8 -26
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +3 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +10 -68
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +48 -88
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +28 -9
- data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +2 -1
- data/lib/aws-sdk-s3/presigned_post.rb +99 -78
- data/lib/aws-sdk-s3/presigner.rb +50 -42
- data/lib/aws-sdk-s3/resource.rb +144 -15
- data/lib/aws-sdk-s3/transfer_manager.rb +321 -0
- data/lib/aws-sdk-s3/types.rb +12223 -4723
- data/lib/aws-sdk-s3/waiters.rb +1 -1
- data/lib/aws-sdk-s3.rb +37 -28
- data/sig/bucket.rbs +231 -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 +115 -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 +2612 -0
- data/sig/customizations/bucket.rbs +19 -0
- data/sig/customizations/object.rbs +38 -0
- data/sig/customizations/object_summary.rbs +35 -0
- data/sig/errors.rbs +44 -0
- data/sig/multipart_upload.rbs +120 -0
- data/sig/multipart_upload_part.rbs +109 -0
- data/sig/object.rbs +464 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +347 -0
- data/sig/object_version.rbs +143 -0
- data/sig/resource.rbs +141 -0
- data/sig/types.rbs +2899 -0
- data/sig/waiters.rbs +95 -0
- metadata +74 -16
- data/lib/aws-sdk-s3/plugins/bucket_arn.rb +0 -212
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# WARNING ABOUT GENERATED CODE
|
|
4
4
|
#
|
|
5
5
|
# This file is generated. See the contributing guide for more information:
|
|
6
|
-
# https://github.com/aws/aws-sdk-ruby/blob/
|
|
6
|
+
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
|
|
7
7
|
#
|
|
8
8
|
# WARNING ABOUT GENERATED CODE
|
|
9
9
|
|
|
@@ -42,7 +42,7 @@ module Aws::S3
|
|
|
42
42
|
@object_key
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
# Container for the bucket owner's
|
|
45
|
+
# Container for the bucket owner's ID.
|
|
46
46
|
# @return [Types::Owner]
|
|
47
47
|
def owner
|
|
48
48
|
data[:owner]
|
|
@@ -55,7 +55,17 @@ module Aws::S3
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
# If present, indicates that the requester was successfully charged for
|
|
58
|
-
# the request.
|
|
58
|
+
# the request. For more information, see [Using Requester Pays buckets
|
|
59
|
+
# for storage transfers and usage][1] in the *Amazon Simple Storage
|
|
60
|
+
# Service user guide*.
|
|
61
|
+
#
|
|
62
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
|
63
|
+
#
|
|
64
|
+
# </note>
|
|
65
|
+
#
|
|
66
|
+
#
|
|
67
|
+
#
|
|
68
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html
|
|
59
69
|
# @return [String]
|
|
60
70
|
def request_charged
|
|
61
71
|
data[:request_charged]
|
|
@@ -75,10 +85,12 @@ module Aws::S3
|
|
|
75
85
|
#
|
|
76
86
|
# @return [self]
|
|
77
87
|
def load
|
|
78
|
-
resp =
|
|
88
|
+
resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
89
|
+
@client.get_object_acl(
|
|
79
90
|
bucket: @bucket_name,
|
|
80
91
|
key: @object_key
|
|
81
92
|
)
|
|
93
|
+
end
|
|
82
94
|
@data = resp.data
|
|
83
95
|
self
|
|
84
96
|
end
|
|
@@ -193,7 +205,9 @@ module Aws::S3
|
|
|
193
205
|
:retry
|
|
194
206
|
end
|
|
195
207
|
end
|
|
196
|
-
Aws::
|
|
208
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
209
|
+
Aws::Waiters::Waiter.new(options).wait({})
|
|
210
|
+
end
|
|
197
211
|
end
|
|
198
212
|
|
|
199
213
|
# @!group Actions
|
|
@@ -221,6 +235,7 @@ module Aws::S3
|
|
|
221
235
|
# },
|
|
222
236
|
# },
|
|
223
237
|
# content_md5: "ContentMD5",
|
|
238
|
+
# checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256, CRC64NVME
|
|
224
239
|
# grant_full_control: "GrantFullControl",
|
|
225
240
|
# grant_read: "GrantRead",
|
|
226
241
|
# grant_read_acp: "GrantReadACP",
|
|
@@ -228,6 +243,7 @@ module Aws::S3
|
|
|
228
243
|
# grant_write_acp: "GrantWriteACP",
|
|
229
244
|
# request_payer: "requester", # accepts requester
|
|
230
245
|
# version_id: "ObjectVersionId",
|
|
246
|
+
# expected_bucket_owner: "AccountId",
|
|
231
247
|
# })
|
|
232
248
|
# @param [Hash] options ({})
|
|
233
249
|
# @option options [String] :acl
|
|
@@ -241,45 +257,90 @@ module Aws::S3
|
|
|
241
257
|
# Contains the elements that set the ACL permissions for an object per
|
|
242
258
|
# grantee.
|
|
243
259
|
# @option options [String] :content_md5
|
|
244
|
-
# The
|
|
245
|
-
# used as a message integrity check to verify that the request body
|
|
246
|
-
# not corrupted in transit. For more information, go to [RFC
|
|
260
|
+
# The Base64 encoded 128-bit `MD5` digest of the data. This header must
|
|
261
|
+
# be used as a message integrity check to verify that the request body
|
|
262
|
+
# was not corrupted in transit. For more information, go to [RFC
|
|
247
263
|
# 1864.>][1]
|
|
248
264
|
#
|
|
265
|
+
# For requests made using the Amazon Web Services Command Line Interface
|
|
266
|
+
# (CLI) or Amazon Web Services SDKs, this field is calculated
|
|
267
|
+
# automatically.
|
|
268
|
+
#
|
|
249
269
|
#
|
|
250
270
|
#
|
|
251
271
|
# [1]: http://www.ietf.org/rfc/rfc1864.txt
|
|
272
|
+
# @option options [String] :checksum_algorithm
|
|
273
|
+
# Indicates the algorithm used to create the checksum for the object
|
|
274
|
+
# when you use the SDK. This header will not provide any additional
|
|
275
|
+
# functionality if you don't use the SDK. When you send this header,
|
|
276
|
+
# there must be a corresponding `x-amz-checksum` or `x-amz-trailer`
|
|
277
|
+
# header sent. Otherwise, Amazon S3 fails the request with the HTTP
|
|
278
|
+
# status code `400 Bad Request`. For more information, see [Checking
|
|
279
|
+
# object integrity][1] in the *Amazon S3 User Guide*.
|
|
280
|
+
#
|
|
281
|
+
# If you provide an individual checksum, Amazon S3 ignores any provided
|
|
282
|
+
# `ChecksumAlgorithm` parameter.
|
|
283
|
+
#
|
|
284
|
+
#
|
|
285
|
+
#
|
|
286
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
|
252
287
|
# @option options [String] :grant_full_control
|
|
253
288
|
# Allows grantee the read, write, read ACP, and write ACP permissions on
|
|
254
289
|
# the bucket.
|
|
290
|
+
#
|
|
291
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
|
255
292
|
# @option options [String] :grant_read
|
|
256
293
|
# Allows grantee to list the objects in the bucket.
|
|
294
|
+
#
|
|
295
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
|
257
296
|
# @option options [String] :grant_read_acp
|
|
258
297
|
# Allows grantee to read the bucket ACL.
|
|
298
|
+
#
|
|
299
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
|
259
300
|
# @option options [String] :grant_write
|
|
260
|
-
# Allows grantee to create
|
|
261
|
-
#
|
|
301
|
+
# Allows grantee to create new objects in the bucket.
|
|
302
|
+
#
|
|
303
|
+
# For the bucket and object owners of existing objects, also allows
|
|
304
|
+
# deletions and overwrites of those objects.
|
|
262
305
|
# @option options [String] :grant_write_acp
|
|
263
306
|
# Allows grantee to write the ACL for the applicable bucket.
|
|
307
|
+
#
|
|
308
|
+
# This functionality is not supported for Amazon S3 on Outposts.
|
|
264
309
|
# @option options [String] :request_payer
|
|
265
310
|
# Confirms that the requester knows that they will be charged for the
|
|
266
311
|
# request. Bucket owners need not specify this parameter in their
|
|
267
|
-
# requests.
|
|
268
|
-
#
|
|
269
|
-
#
|
|
312
|
+
# requests. If either the source or destination S3 bucket has Requester
|
|
313
|
+
# Pays enabled, the requester will pay for corresponding charges to copy
|
|
314
|
+
# the object. For information about downloading objects from Requester
|
|
315
|
+
# Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
|
|
316
|
+
# in the *Amazon S3 User Guide*.
|
|
317
|
+
#
|
|
318
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
|
319
|
+
#
|
|
320
|
+
# </note>
|
|
270
321
|
#
|
|
271
322
|
#
|
|
272
323
|
#
|
|
273
324
|
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
|
|
274
325
|
# @option options [String] :version_id
|
|
275
|
-
#
|
|
326
|
+
# Version ID used to reference a specific version of the object.
|
|
327
|
+
#
|
|
328
|
+
# <note markdown="1"> This functionality is not supported for directory buckets.
|
|
329
|
+
#
|
|
330
|
+
# </note>
|
|
331
|
+
# @option options [String] :expected_bucket_owner
|
|
332
|
+
# The account ID of the expected bucket owner. If the account ID that
|
|
333
|
+
# you provide does not match the actual owner of the bucket, the request
|
|
334
|
+
# fails with the HTTP status code `403 Forbidden` (access denied).
|
|
276
335
|
# @return [Types::PutObjectAclOutput]
|
|
277
336
|
def put(options = {})
|
|
278
337
|
options = options.merge(
|
|
279
338
|
bucket: @bucket_name,
|
|
280
339
|
key: @object_key
|
|
281
340
|
)
|
|
282
|
-
resp =
|
|
341
|
+
resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
|
342
|
+
@client.put_object_acl(options)
|
|
343
|
+
end
|
|
283
344
|
resp.data
|
|
284
345
|
end
|
|
285
346
|
|
|
@@ -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.metric('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
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'thread'
|
|
4
|
-
require
|
|
4
|
+
require "cgi/escape"
|
|
5
|
+
require "cgi/util" if RUBY_VERSION < "3.5"
|
|
5
6
|
|
|
6
7
|
module Aws
|
|
7
8
|
module S3
|
|
@@ -15,12 +16,18 @@ module Aws
|
|
|
15
16
|
MAX_PARTS = 10_000
|
|
16
17
|
|
|
17
18
|
# @option options [Client] :client
|
|
18
|
-
# @option [Integer] :min_part_size (52428800)
|
|
19
|
-
# Defaults to 50MB.
|
|
20
|
-
#
|
|
21
|
-
#
|
|
22
|
-
#
|
|
19
|
+
# @option options [Integer] :min_part_size (52428800)
|
|
20
|
+
# Size of copied parts. Defaults to 50MB.
|
|
21
|
+
# @option options [Integer] :thread_count (10) Number of concurrent
|
|
22
|
+
# threads to use for copying parts.
|
|
23
|
+
# @option options [Boolean] :use_source_parts (false) Use part sizes
|
|
24
|
+
# defined on the source object if any exist. If copying or moving an
|
|
25
|
+
# object that is already multipart, this does not re-part the object,
|
|
26
|
+
# instead re-using the part definitions on the original. That means
|
|
27
|
+
# the etag and any checksums will not change. This is especially
|
|
28
|
+
# useful if the source object has parts with varied sizes.
|
|
23
29
|
def initialize(options = {})
|
|
30
|
+
@use_source_parts = options.delete(:use_source_parts) || false
|
|
24
31
|
@thread_count = options.delete(:thread_count) || 10
|
|
25
32
|
@min_part_size = options.delete(:min_part_size) || (FIVE_MB * 10)
|
|
26
33
|
@client = options[:client] || Client.new
|
|
@@ -31,8 +38,9 @@ module Aws
|
|
|
31
38
|
|
|
32
39
|
# @option (see S3::Client#copy_object)
|
|
33
40
|
def copy(options = {})
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
metadata = source_metadata(options)
|
|
42
|
+
size = metadata[:content_length]
|
|
43
|
+
options[:upload_id] = initiate_upload(metadata.merge(options))
|
|
36
44
|
begin
|
|
37
45
|
parts = copy_parts(size, default_part_size(size), options)
|
|
38
46
|
complete_upload(parts, options)
|
|
@@ -74,10 +82,9 @@ module Aws
|
|
|
74
82
|
end
|
|
75
83
|
|
|
76
84
|
def copy_part(part)
|
|
77
|
-
{
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
85
|
+
@client.upload_part_copy(part).copy_part_result.to_h.merge({
|
|
86
|
+
part_number: part[:part_number]
|
|
87
|
+
}).tap { |result| result.delete(:last_modified) }
|
|
81
88
|
end
|
|
82
89
|
|
|
83
90
|
def complete_upload(parts, options)
|
|
@@ -100,26 +107,39 @@ module Aws
|
|
|
100
107
|
parts = []
|
|
101
108
|
options = options_for(:upload_part_copy, options)
|
|
102
109
|
while offset < size
|
|
110
|
+
part_size = calculate_part_size(part_number, default_part_size, options)
|
|
103
111
|
parts << options.merge({
|
|
104
112
|
part_number: part_number,
|
|
105
|
-
copy_source_range: byte_range(offset,
|
|
113
|
+
copy_source_range: byte_range(offset, part_size, size),
|
|
106
114
|
})
|
|
107
115
|
part_number += 1
|
|
108
|
-
offset +=
|
|
116
|
+
offset += part_size
|
|
109
117
|
end
|
|
110
118
|
parts
|
|
111
119
|
end
|
|
112
120
|
|
|
113
|
-
def byte_range(offset,
|
|
114
|
-
if offset +
|
|
115
|
-
"bytes=#{offset}-#{offset +
|
|
121
|
+
def byte_range(offset, part_size, size)
|
|
122
|
+
if offset + part_size < size
|
|
123
|
+
"bytes=#{offset}-#{offset + part_size - 1}"
|
|
116
124
|
else
|
|
117
125
|
"bytes=#{offset}-#{size - 1}"
|
|
118
126
|
end
|
|
119
127
|
end
|
|
120
128
|
|
|
121
|
-
def
|
|
122
|
-
|
|
129
|
+
def calculate_part_size(part_number, default_part_size, options)
|
|
130
|
+
if @use_source_parts && source_has_parts(options)
|
|
131
|
+
source_metadata(options.merge({ part_number: part_number }))[:content_length]
|
|
132
|
+
else
|
|
133
|
+
default_part_size
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def source_has_parts(options)
|
|
138
|
+
@source_has_parts ||= source_metadata(options.merge({ part_number: 1 }))[:parts_count]
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def source_metadata(options)
|
|
142
|
+
return options.slice(:content_length) if options[:content_length]
|
|
123
143
|
|
|
124
144
|
client = options[:copy_source_client] || @client
|
|
125
145
|
|
|
@@ -129,10 +149,15 @@ module Aws
|
|
|
129
149
|
bucket, key = options[:copy_source].match(/([^\/]+?)\/(.+)/)[1,2]
|
|
130
150
|
end
|
|
131
151
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
152
|
+
head_opts = { bucket: bucket, key: CGI.unescape(key) }.tap { |opts|
|
|
153
|
+
opts[:version_id] = version_id if version_id
|
|
154
|
+
opts[:part_number] = options[:part_number] if options[:part_number]
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
client.head_object(head_opts).to_h.tap { |head|
|
|
158
|
+
head.delete(:server_side_encryption)
|
|
159
|
+
head.delete(:ssekms_key_id)
|
|
160
|
+
}
|
|
136
161
|
end
|
|
137
162
|
|
|
138
163
|
def default_part_size(source_size)
|