aws-sdk-s3 1.96.2 → 1.132.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 +256 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-s3/bucket.rb +226 -76
- data/lib/aws-sdk-s3/bucket_acl.rb +30 -7
- data/lib/aws-sdk-s3/bucket_cors.rb +35 -10
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +39 -12
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +40 -10
- data/lib/aws-sdk-s3/bucket_logging.rb +30 -7
- data/lib/aws-sdk-s3/bucket_notification.rb +28 -10
- data/lib/aws-sdk-s3/bucket_policy.rb +35 -10
- data/lib/aws-sdk-s3/bucket_request_payment.rb +30 -7
- data/lib/aws-sdk-s3/bucket_tagging.rb +35 -10
- data/lib/aws-sdk-s3/bucket_versioning.rb +78 -17
- data/lib/aws-sdk-s3/bucket_website.rb +35 -10
- data/lib/aws-sdk-s3/client.rb +3854 -2120
- data/lib/aws-sdk-s3/client_api.rb +601 -208
- 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 +130 -24
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +2 -0
- data/lib/aws-sdk-s3/encryption/client.rb +7 -3
- data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +0 -4
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +13 -9
- data/lib/aws-sdk-s3/encryptionV2/client.rb +7 -3
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +1 -4
- data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +0 -4
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +10 -6
- data/lib/aws-sdk-s3/endpoint_parameters.rb +146 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +509 -0
- data/lib/aws-sdk-s3/endpoints.rb +2150 -0
- data/lib/aws-sdk-s3/file_downloader.rb +57 -27
- data/lib/aws-sdk-s3/file_uploader.rb +12 -5
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +26 -7
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +41 -13
- data/lib/aws-sdk-s3/multipart_upload.rb +138 -16
- data/lib/aws-sdk-s3/multipart_upload_part.rb +144 -18
- data/lib/aws-sdk-s3/object.rb +364 -160
- data/lib/aws-sdk-s3/object_acl.rb +32 -9
- 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 +291 -123
- data/lib/aws-sdk-s3/object_version.rb +99 -46
- data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -44
- data/lib/aws-sdk-s3/plugins/arn.rb +22 -180
- 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 +262 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +2 -1
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +6 -29
- data/lib/aws-sdk-s3/plugins/md5s.rb +5 -3
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +35 -100
- 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 +24 -29
- data/lib/aws-sdk-s3/resource.rb +25 -3
- data/lib/aws-sdk-s3/types.rb +3307 -4625
- data/lib/aws-sdk-s3.rb +5 -1
- metadata +14 -11
- data/lib/aws-sdk-s3/arn/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
@@ -31,40 +31,61 @@ module Aws
|
|
31
31
|
key: options[:key],
|
32
32
|
}
|
33
33
|
@params[:version_id] = options[:version_id] if options[:version_id]
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
@params[:checksum_mode] = options[:checksum_mode] || 'ENABLED'
|
35
|
+
@on_checksum_validated = options[:on_checksum_validated]
|
36
|
+
|
37
|
+
validate!
|
38
|
+
|
39
|
+
Aws::Plugins::UserAgent.feature('s3-transfer') do
|
40
|
+
case @mode
|
41
|
+
when 'auto' then multipart_download
|
42
|
+
when 'single_request' then single_request
|
43
|
+
when 'get_range'
|
44
|
+
if @chunk_size
|
45
|
+
resp = @client.head_object(@params)
|
46
|
+
multithreaded_get_by_ranges(construct_chunks(resp.content_length))
|
47
|
+
else
|
48
|
+
msg = 'In :get_range mode, :chunk_size must be provided'
|
49
|
+
raise ArgumentError, msg
|
50
|
+
end
|
42
51
|
else
|
43
|
-
msg =
|
52
|
+
msg = "Invalid mode #{@mode} provided, "\
|
53
|
+
'mode should be :single_request, :get_range or :auto'
|
44
54
|
raise ArgumentError, msg
|
45
55
|
end
|
46
|
-
else
|
47
|
-
msg = "Invalid mode #{@mode} provided, "\
|
48
|
-
'mode should be :single_request, :get_range or :auto'
|
49
|
-
raise ArgumentError, msg
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
53
59
|
private
|
54
60
|
|
61
|
+
def validate!
|
62
|
+
if @on_checksum_validated && @params[:checksum_mode] != 'ENABLED'
|
63
|
+
raise ArgumentError, "You must set checksum_mode: 'ENABLED' " +
|
64
|
+
"when providing a on_checksum_validated callback"
|
65
|
+
end
|
66
|
+
|
67
|
+
if @on_checksum_validated && !@on_checksum_validated.respond_to?(:call)
|
68
|
+
raise ArgumentError, 'on_checksum_validated must be callable'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
55
72
|
def multipart_download
|
56
73
|
resp = @client.head_object(@params.merge(part_number: 1))
|
57
74
|
count = resp.parts_count
|
58
75
|
if count.nil? || count <= 1
|
59
|
-
resp.content_length
|
60
|
-
single_request
|
76
|
+
if resp.content_length <= MIN_CHUNK_SIZE
|
77
|
+
single_request
|
78
|
+
else
|
61
79
|
multithreaded_get_by_ranges(construct_chunks(resp.content_length))
|
80
|
+
end
|
62
81
|
else
|
63
82
|
# partNumber is an option
|
64
83
|
resp = @client.head_object(@params)
|
65
|
-
resp.content_length
|
66
|
-
single_request
|
84
|
+
if resp.content_length <= MIN_CHUNK_SIZE
|
85
|
+
single_request
|
86
|
+
else
|
67
87
|
compute_mode(resp.content_length, count)
|
88
|
+
end
|
68
89
|
end
|
69
90
|
end
|
70
91
|
|
@@ -82,10 +103,11 @@ module Aws
|
|
82
103
|
offset = 0
|
83
104
|
default_chunk_size = compute_chunk(file_size)
|
84
105
|
chunks = []
|
85
|
-
while offset
|
106
|
+
while offset < file_size
|
86
107
|
progress = offset + default_chunk_size
|
87
|
-
|
88
|
-
|
108
|
+
progress = file_size if progress > file_size
|
109
|
+
chunks << "bytes=#{offset}-#{progress - 1}"
|
110
|
+
offset = progress
|
89
111
|
end
|
90
112
|
chunks
|
91
113
|
end
|
@@ -94,12 +116,9 @@ module Aws
|
|
94
116
|
if @chunk_size && @chunk_size > file_size
|
95
117
|
raise ArgumentError, ":chunk_size shouldn't exceed total file size."
|
96
118
|
else
|
97
|
-
|
98
|
-
(file_size.to_f / MAX_PARTS).ceil,
|
99
|
-
MIN_CHUNK_SIZE
|
119
|
+
@chunk_size || [
|
120
|
+
(file_size.to_f / MAX_PARTS).ceil, MIN_CHUNK_SIZE
|
100
121
|
].max.to_i
|
101
|
-
chunk_size -= 1 if file_size % chunk_size == 1
|
102
|
-
chunk_size
|
103
122
|
end
|
104
123
|
end
|
105
124
|
|
@@ -125,6 +144,9 @@ module Aws
|
|
125
144
|
@params.merge(param.to_sym => chunk)
|
126
145
|
)
|
127
146
|
write(resp)
|
147
|
+
if @on_checksum_validated && resp.checksum_validated
|
148
|
+
@on_checksum_validated.call(resp.checksum_validated, resp)
|
149
|
+
end
|
128
150
|
end
|
129
151
|
end
|
130
152
|
threads.each(&:join)
|
@@ -134,13 +156,21 @@ module Aws
|
|
134
156
|
def write(resp)
|
135
157
|
range, _ = resp.content_range.split(' ').last.split('/')
|
136
158
|
head, _ = range.split('-').map {|s| s.to_i}
|
137
|
-
|
159
|
+
File.write(@path, resp.body.read, head)
|
138
160
|
end
|
139
161
|
|
140
162
|
def single_request
|
141
|
-
@client.get_object(
|
163
|
+
resp = @client.get_object(
|
142
164
|
@params.merge(response_target: @path)
|
143
165
|
)
|
166
|
+
|
167
|
+
return resp unless @on_checksum_validated
|
168
|
+
|
169
|
+
if resp.checksum_validated
|
170
|
+
@on_checksum_validated.call(resp.checksum_validated, resp)
|
171
|
+
end
|
172
|
+
|
173
|
+
resp
|
144
174
|
end
|
145
175
|
end
|
146
176
|
end
|
@@ -11,7 +11,7 @@ module Aws
|
|
11
11
|
|
12
12
|
# @param [Hash] options
|
13
13
|
# @option options [Client] :client
|
14
|
-
# @option options [Integer] :multipart_threshold (
|
14
|
+
# @option options [Integer] :multipart_threshold (104857600)
|
15
15
|
def initialize(options = {})
|
16
16
|
@options = options
|
17
17
|
@client = options[:client] || Client.new
|
@@ -32,12 +32,19 @@ module Aws
|
|
32
32
|
# @option options [Proc] :progress_callback
|
33
33
|
# A Proc that will be called when each chunk of the upload is sent.
|
34
34
|
# It will be invoked with [bytes_read], [total_sizes]
|
35
|
+
# @option options [Integer] :thread_count
|
36
|
+
# The thread count to use for multipart uploads. Ignored for
|
37
|
+
# objects smaller than the multipart threshold.
|
35
38
|
# @return [void]
|
36
39
|
def upload(source, options = {})
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
Aws::Plugins::UserAgent.feature('s3-transfer') do
|
41
|
+
if File.size(source) >= multipart_threshold
|
42
|
+
MultipartFileUploader.new(@options).upload(source, options)
|
43
|
+
else
|
44
|
+
# remove multipart parameters not supported by put_object
|
45
|
+
options.delete(:thread_count)
|
46
|
+
put_object(source, options)
|
47
|
+
end
|
41
48
|
end
|
42
49
|
end
|
43
50
|
|
@@ -21,6 +21,10 @@ module Aws
|
|
21
21
|
Client.api.operation(:create_multipart_upload).input.shape.member_names
|
22
22
|
)
|
23
23
|
|
24
|
+
COMPLETE_OPTIONS = Set.new(
|
25
|
+
Client.api.operation(:complete_multipart_upload).input.shape.member_names
|
26
|
+
)
|
27
|
+
|
24
28
|
# @api private
|
25
29
|
UPLOAD_PART_OPTIONS = Set.new(
|
26
30
|
Client.api.operation(:upload_part).input.shape.member_names
|
@@ -42,7 +46,7 @@ module Aws
|
|
42
46
|
# @option options [Proc] :progress_callback
|
43
47
|
# A Proc that will be called when each chunk of the upload is sent.
|
44
48
|
# It will be invoked with [bytes_read], [total_sizes]
|
45
|
-
# @return [
|
49
|
+
# @return [Seahorse::Client::Response] - the CompleteMultipartUploadResponse
|
46
50
|
def upload(source, options = {})
|
47
51
|
if File.size(source) < MIN_PART_SIZE
|
48
52
|
raise ArgumentError, FILE_TOO_SMALL
|
@@ -61,10 +65,10 @@ module Aws
|
|
61
65
|
|
62
66
|
def complete_upload(upload_id, parts, options)
|
63
67
|
@client.complete_multipart_upload(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
+
**complete_opts(options).merge(
|
69
|
+
upload_id: upload_id,
|
70
|
+
multipart_upload: { parts: parts }
|
71
|
+
)
|
68
72
|
)
|
69
73
|
end
|
70
74
|
|
@@ -123,6 +127,13 @@ module Aws
|
|
123
127
|
end
|
124
128
|
end
|
125
129
|
|
130
|
+
def complete_opts(options)
|
131
|
+
COMPLETE_OPTIONS.inject({}) do |hash, key|
|
132
|
+
hash[key] = options[key] if options.key?(key)
|
133
|
+
hash
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
126
137
|
def upload_part_opts(options)
|
127
138
|
UPLOAD_PART_OPTIONS.inject({}) do |hash, key|
|
128
139
|
hash[key] = options[key] if options.key?(key)
|
@@ -147,7 +158,15 @@ module Aws
|
|
147
158
|
end
|
148
159
|
resp = @client.upload_part(part)
|
149
160
|
part[:body].close
|
150
|
-
|
161
|
+
completed_part = {etag: resp.etag, part_number: part[:part_number]}
|
162
|
+
|
163
|
+
# get the requested checksum from the response
|
164
|
+
if part[:checksum_algorithm]
|
165
|
+
k = "checksum_#{part[:checksum_algorithm].downcase}".to_sym
|
166
|
+
completed_part[k] = resp[k]
|
167
|
+
end
|
168
|
+
|
169
|
+
completed.push(completed_part)
|
151
170
|
end
|
152
171
|
nil
|
153
172
|
rescue => error
|
@@ -224,4 +243,4 @@ module Aws
|
|
224
243
|
end
|
225
244
|
end
|
226
245
|
end
|
227
|
-
end
|
246
|
+
end
|
@@ -26,6 +26,10 @@ module Aws
|
|
26
26
|
UPLOAD_PART_OPTIONS =
|
27
27
|
Set.new(Client.api.operation(:upload_part).input.shape.member_names)
|
28
28
|
|
29
|
+
# @api private
|
30
|
+
COMPLETE_UPLOAD_OPTIONS =
|
31
|
+
Set.new(Client.api.operation(:complete_multipart_upload).input.shape.member_names)
|
32
|
+
|
29
33
|
# @option options [Client] :client
|
30
34
|
def initialize(options = {})
|
31
35
|
@client = options[:client] || Client.new
|
@@ -39,11 +43,13 @@ module Aws
|
|
39
43
|
|
40
44
|
# @option options [required,String] :bucket
|
41
45
|
# @option options [required,String] :key
|
42
|
-
# @return [
|
46
|
+
# @return [Seahorse::Client::Response] - the CompleteMultipartUploadResponse
|
43
47
|
def upload(options = {}, &block)
|
44
|
-
|
45
|
-
|
46
|
-
|
48
|
+
Aws::Plugins::UserAgent.feature('s3-transfer') do
|
49
|
+
upload_id = initiate_upload(options)
|
50
|
+
parts = upload_parts(upload_id, options, &block)
|
51
|
+
complete_upload(upload_id, parts, options)
|
52
|
+
end
|
47
53
|
end
|
48
54
|
|
49
55
|
private
|
@@ -54,17 +60,22 @@ module Aws
|
|
54
60
|
|
55
61
|
def complete_upload(upload_id, parts, options)
|
56
62
|
@client.complete_multipart_upload(
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
63
|
+
**complete_opts(options).merge(
|
64
|
+
upload_id: upload_id,
|
65
|
+
multipart_upload: { parts: parts }
|
66
|
+
)
|
67
|
+
)
|
61
68
|
end
|
62
69
|
|
63
70
|
def upload_parts(upload_id, options, &block)
|
64
71
|
completed = Queue.new
|
72
|
+
thread_errors = []
|
65
73
|
errors = begin
|
66
74
|
IO.pipe do |read_pipe, write_pipe|
|
67
|
-
threads = upload_in_threads(
|
75
|
+
threads = upload_in_threads(
|
76
|
+
read_pipe, completed,
|
77
|
+
upload_part_opts(options).merge(upload_id: upload_id),
|
78
|
+
thread_errors)
|
68
79
|
begin
|
69
80
|
block.call(write_pipe)
|
70
81
|
ensure
|
@@ -74,7 +85,7 @@ module Aws
|
|
74
85
|
threads.map(&:value).compact
|
75
86
|
end
|
76
87
|
rescue => e
|
77
|
-
[e]
|
88
|
+
thread_errors + [e]
|
78
89
|
end
|
79
90
|
|
80
91
|
if errors.empty?
|
@@ -113,6 +124,13 @@ module Aws
|
|
113
124
|
end
|
114
125
|
end
|
115
126
|
|
127
|
+
def complete_opts(options)
|
128
|
+
COMPLETE_UPLOAD_OPTIONS.inject({}) do |hash, key|
|
129
|
+
hash[key] = options[key] if options.key?(key)
|
130
|
+
hash
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
116
134
|
def read_to_part_body(read_pipe)
|
117
135
|
return if read_pipe.closed?
|
118
136
|
temp_io = @tempfile ? Tempfile.new(TEMPFILE_PREIX) : StringIO.new(String.new)
|
@@ -130,7 +148,7 @@ module Aws
|
|
130
148
|
end
|
131
149
|
end
|
132
150
|
|
133
|
-
def upload_in_threads(read_pipe, completed, options)
|
151
|
+
def upload_in_threads(read_pipe, completed, options, thread_errors)
|
134
152
|
mutex = Mutex.new
|
135
153
|
part_number = 0
|
136
154
|
@thread_count.times.map do
|
@@ -147,7 +165,14 @@ module Aws
|
|
147
165
|
part_number: thread_part_number,
|
148
166
|
)
|
149
167
|
resp = @client.upload_part(part)
|
150
|
-
|
168
|
+
completed_part = {etag: resp.etag, part_number: part[:part_number]}
|
169
|
+
|
170
|
+
# get the requested checksum from the response
|
171
|
+
if part[:checksum_algorithm]
|
172
|
+
k = "checksum_#{part[:checksum_algorithm].downcase}".to_sym
|
173
|
+
completed_part[k] = resp[k]
|
174
|
+
end
|
175
|
+
completed.push(completed_part)
|
151
176
|
ensure
|
152
177
|
if Tempfile === body
|
153
178
|
body.close
|
@@ -160,7 +185,10 @@ module Aws
|
|
160
185
|
nil
|
161
186
|
rescue => error
|
162
187
|
# keep other threads from uploading other parts
|
163
|
-
mutex.synchronize
|
188
|
+
mutex.synchronize do
|
189
|
+
thread_errors.push(error)
|
190
|
+
read_pipe.close_read unless read_pipe.closed?
|
191
|
+
end
|
164
192
|
error
|
165
193
|
end
|
166
194
|
end
|
@@ -87,6 +87,12 @@ module Aws::S3
|
|
87
87
|
data[:initiator]
|
88
88
|
end
|
89
89
|
|
90
|
+
# The algorithm that was used to create a checksum of the object.
|
91
|
+
# @return [String]
|
92
|
+
def checksum_algorithm
|
93
|
+
data[:checksum_algorithm]
|
94
|
+
end
|
95
|
+
|
90
96
|
# @!endgroup
|
91
97
|
|
92
98
|
# @return [Client]
|
@@ -211,7 +217,9 @@ module Aws::S3
|
|
211
217
|
:retry
|
212
218
|
end
|
213
219
|
end
|
214
|
-
Aws::
|
220
|
+
Aws::Plugins::UserAgent.feature('resource') do
|
221
|
+
Aws::Waiters::Waiter.new(options).wait({})
|
222
|
+
end
|
215
223
|
end
|
216
224
|
|
217
225
|
# @!group Actions
|
@@ -226,8 +234,8 @@ module Aws::S3
|
|
226
234
|
# @option options [String] :request_payer
|
227
235
|
# Confirms that the requester knows that they will be charged for the
|
228
236
|
# request. Bucket owners need not specify this parameter in their
|
229
|
-
# requests. For information about downloading objects from
|
230
|
-
#
|
237
|
+
# requests. For information about downloading objects from Requester
|
238
|
+
# Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
|
231
239
|
# in the *Amazon S3 User Guide*.
|
232
240
|
#
|
233
241
|
#
|
@@ -235,8 +243,8 @@ module Aws::S3
|
|
235
243
|
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
|
236
244
|
# @option options [String] :expected_bucket_owner
|
237
245
|
# The account ID of the expected bucket owner. If the bucket is owned by
|
238
|
-
# a different account, the request
|
239
|
-
#
|
246
|
+
# a different account, the request fails with the HTTP status code `403
|
247
|
+
# Forbidden` (access denied).
|
240
248
|
# @return [Types::AbortMultipartUploadOutput]
|
241
249
|
def abort(options = {})
|
242
250
|
options = options.merge(
|
@@ -244,7 +252,9 @@ module Aws::S3
|
|
244
252
|
key: @object_key,
|
245
253
|
upload_id: @id
|
246
254
|
)
|
247
|
-
resp =
|
255
|
+
resp = Aws::Plugins::UserAgent.feature('resource') do
|
256
|
+
@client.abort_multipart_upload(options)
|
257
|
+
end
|
248
258
|
resp.data
|
249
259
|
end
|
250
260
|
|
@@ -255,21 +265,72 @@ module Aws::S3
|
|
255
265
|
# parts: [
|
256
266
|
# {
|
257
267
|
# etag: "ETag",
|
268
|
+
# checksum_crc32: "ChecksumCRC32",
|
269
|
+
# checksum_crc32c: "ChecksumCRC32C",
|
270
|
+
# checksum_sha1: "ChecksumSHA1",
|
271
|
+
# checksum_sha256: "ChecksumSHA256",
|
258
272
|
# part_number: 1,
|
259
273
|
# },
|
260
274
|
# ],
|
261
275
|
# },
|
276
|
+
# checksum_crc32: "ChecksumCRC32",
|
277
|
+
# checksum_crc32c: "ChecksumCRC32C",
|
278
|
+
# checksum_sha1: "ChecksumSHA1",
|
279
|
+
# checksum_sha256: "ChecksumSHA256",
|
262
280
|
# request_payer: "requester", # accepts requester
|
263
281
|
# expected_bucket_owner: "AccountId",
|
282
|
+
# sse_customer_algorithm: "SSECustomerAlgorithm",
|
283
|
+
# sse_customer_key: "SSECustomerKey",
|
284
|
+
# sse_customer_key_md5: "SSECustomerKeyMD5",
|
264
285
|
# })
|
265
286
|
# @param [Hash] options ({})
|
266
287
|
# @option options [Types::CompletedMultipartUpload] :multipart_upload
|
267
288
|
# The container for the multipart upload request information.
|
289
|
+
# @option options [String] :checksum_crc32
|
290
|
+
# This header can be used as a data integrity check to verify that the
|
291
|
+
# data received is the same data that was originally sent. This header
|
292
|
+
# specifies the base64-encoded, 32-bit CRC32 checksum of the object. For
|
293
|
+
# more information, see [Checking object integrity][1] in the *Amazon S3
|
294
|
+
# User Guide*.
|
295
|
+
#
|
296
|
+
#
|
297
|
+
#
|
298
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
299
|
+
# @option options [String] :checksum_crc32c
|
300
|
+
# This header can be used as a data integrity check to verify that the
|
301
|
+
# data received is the same data that was originally sent. This header
|
302
|
+
# specifies the base64-encoded, 32-bit CRC32C checksum of the object.
|
303
|
+
# For more information, see [Checking object integrity][1] in the
|
304
|
+
# *Amazon S3 User Guide*.
|
305
|
+
#
|
306
|
+
#
|
307
|
+
#
|
308
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
309
|
+
# @option options [String] :checksum_sha1
|
310
|
+
# This header can be used as a data integrity check to verify that the
|
311
|
+
# data received is the same data that was originally sent. This header
|
312
|
+
# specifies the base64-encoded, 160-bit SHA-1 digest of the object. For
|
313
|
+
# more information, see [Checking object integrity][1] in the *Amazon S3
|
314
|
+
# User Guide*.
|
315
|
+
#
|
316
|
+
#
|
317
|
+
#
|
318
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
319
|
+
# @option options [String] :checksum_sha256
|
320
|
+
# This header can be used as a data integrity check to verify that the
|
321
|
+
# data received is the same data that was originally sent. This header
|
322
|
+
# specifies the base64-encoded, 256-bit SHA-256 digest of the object.
|
323
|
+
# For more information, see [Checking object integrity][1] in the
|
324
|
+
# *Amazon S3 User Guide*.
|
325
|
+
#
|
326
|
+
#
|
327
|
+
#
|
328
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
|
268
329
|
# @option options [String] :request_payer
|
269
330
|
# Confirms that the requester knows that they will be charged for the
|
270
331
|
# request. Bucket owners need not specify this parameter in their
|
271
|
-
# requests. For information about downloading objects from
|
272
|
-
#
|
332
|
+
# requests. For information about downloading objects from Requester
|
333
|
+
# Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
|
273
334
|
# in the *Amazon S3 User Guide*.
|
274
335
|
#
|
275
336
|
#
|
@@ -277,8 +338,35 @@ module Aws::S3
|
|
277
338
|
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
|
278
339
|
# @option options [String] :expected_bucket_owner
|
279
340
|
# The account ID of the expected bucket owner. If the bucket is owned by
|
280
|
-
# a different account, the request
|
281
|
-
#
|
341
|
+
# a different account, the request fails with the HTTP status code `403
|
342
|
+
# Forbidden` (access denied).
|
343
|
+
# @option options [String] :sse_customer_algorithm
|
344
|
+
# The server-side encryption (SSE) algorithm used to encrypt the object.
|
345
|
+
# This parameter is needed only when the object was created using a
|
346
|
+
# checksum algorithm. For more information, see [Protecting data using
|
347
|
+
# SSE-C keys][1] in the *Amazon S3 User Guide*.
|
348
|
+
#
|
349
|
+
#
|
350
|
+
#
|
351
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
|
352
|
+
# @option options [String] :sse_customer_key
|
353
|
+
# The server-side encryption (SSE) customer managed key. This parameter
|
354
|
+
# is needed only when the object was created using a checksum algorithm.
|
355
|
+
# For more information, see [Protecting data using SSE-C keys][1] in the
|
356
|
+
# *Amazon S3 User Guide*.
|
357
|
+
#
|
358
|
+
#
|
359
|
+
#
|
360
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
|
361
|
+
# @option options [String] :sse_customer_key_md5
|
362
|
+
# The MD5 server-side encryption (SSE) customer managed key. This
|
363
|
+
# parameter is needed only when the object was created using a checksum
|
364
|
+
# algorithm. For more information, see [Protecting data using SSE-C
|
365
|
+
# keys][1] in the *Amazon S3 User Guide*.
|
366
|
+
#
|
367
|
+
#
|
368
|
+
#
|
369
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
|
282
370
|
# @return [Object]
|
283
371
|
def complete(options = {})
|
284
372
|
options = options.merge(
|
@@ -286,7 +374,9 @@ module Aws::S3
|
|
286
374
|
key: @object_key,
|
287
375
|
upload_id: @id
|
288
376
|
)
|
289
|
-
|
377
|
+
Aws::Plugins::UserAgent.feature('resource') do
|
378
|
+
@client.complete_multipart_upload(options)
|
379
|
+
end
|
290
380
|
Object.new(
|
291
381
|
bucket_name: @bucket_name,
|
292
382
|
key: @object_key,
|
@@ -322,13 +412,16 @@ module Aws::S3
|
|
322
412
|
# parts = multipart_upload.parts({
|
323
413
|
# request_payer: "requester", # accepts requester
|
324
414
|
# expected_bucket_owner: "AccountId",
|
415
|
+
# sse_customer_algorithm: "SSECustomerAlgorithm",
|
416
|
+
# sse_customer_key: "SSECustomerKey",
|
417
|
+
# sse_customer_key_md5: "SSECustomerKeyMD5",
|
325
418
|
# })
|
326
419
|
# @param [Hash] options ({})
|
327
420
|
# @option options [String] :request_payer
|
328
421
|
# Confirms that the requester knows that they will be charged for the
|
329
422
|
# request. Bucket owners need not specify this parameter in their
|
330
|
-
# requests. For information about downloading objects from
|
331
|
-
#
|
423
|
+
# requests. For information about downloading objects from Requester
|
424
|
+
# Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
|
332
425
|
# in the *Amazon S3 User Guide*.
|
333
426
|
#
|
334
427
|
#
|
@@ -336,8 +429,35 @@ module Aws::S3
|
|
336
429
|
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
|
337
430
|
# @option options [String] :expected_bucket_owner
|
338
431
|
# The account ID of the expected bucket owner. If the bucket is owned by
|
339
|
-
# a different account, the request
|
340
|
-
#
|
432
|
+
# a different account, the request fails with the HTTP status code `403
|
433
|
+
# Forbidden` (access denied).
|
434
|
+
# @option options [String] :sse_customer_algorithm
|
435
|
+
# The server-side encryption (SSE) algorithm used to encrypt the object.
|
436
|
+
# This parameter is needed only when the object was created using a
|
437
|
+
# checksum algorithm. For more information, see [Protecting data using
|
438
|
+
# SSE-C keys][1] in the *Amazon S3 User Guide*.
|
439
|
+
#
|
440
|
+
#
|
441
|
+
#
|
442
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
|
443
|
+
# @option options [String] :sse_customer_key
|
444
|
+
# The server-side encryption (SSE) customer managed key. This parameter
|
445
|
+
# is needed only when the object was created using a checksum algorithm.
|
446
|
+
# For more information, see [Protecting data using SSE-C keys][1] in the
|
447
|
+
# *Amazon S3 User Guide*.
|
448
|
+
#
|
449
|
+
#
|
450
|
+
#
|
451
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
|
452
|
+
# @option options [String] :sse_customer_key_md5
|
453
|
+
# The MD5 server-side encryption (SSE) customer managed key. This
|
454
|
+
# parameter is needed only when the object was created using a checksum
|
455
|
+
# algorithm. For more information, see [Protecting data using SSE-C
|
456
|
+
# keys][1] in the *Amazon S3 User Guide*.
|
457
|
+
#
|
458
|
+
#
|
459
|
+
#
|
460
|
+
# [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html
|
341
461
|
# @return [MultipartUploadPart::Collection]
|
342
462
|
def parts(options = {})
|
343
463
|
batches = Enumerator.new do |y|
|
@@ -346,7 +466,9 @@ module Aws::S3
|
|
346
466
|
key: @object_key,
|
347
467
|
upload_id: @id
|
348
468
|
)
|
349
|
-
resp =
|
469
|
+
resp = Aws::Plugins::UserAgent.feature('resource') do
|
470
|
+
@client.list_parts(options)
|
471
|
+
end
|
350
472
|
resp.each_page do |page|
|
351
473
|
batch = []
|
352
474
|
page.data.parts.each do |p|
|