aws-sdk-s3 1.48.0 → 1.183.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 +5 -5
- data/CHANGELOG.md +1352 -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 +1005 -106
- data/lib/aws-sdk-s3/bucket_acl.rb +65 -18
- data/lib/aws-sdk-s3/bucket_cors.rb +80 -18
- data/lib/aws-sdk-s3/bucket_lifecycle.rb +71 -20
- data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +126 -21
- data/lib/aws-sdk-s3/bucket_logging.rb +68 -16
- data/lib/aws-sdk-s3/bucket_notification.rb +52 -20
- data/lib/aws-sdk-s3/bucket_policy.rb +108 -17
- data/lib/aws-sdk-s3/bucket_region_cache.rb +11 -5
- data/lib/aws-sdk-s3/bucket_request_payment.rb +60 -15
- data/lib/aws-sdk-s3/bucket_tagging.rb +71 -18
- data/lib/aws-sdk-s3/bucket_versioning.rb +133 -17
- data/lib/aws-sdk-s3/bucket_website.rb +78 -21
- data/lib/aws-sdk-s3/client.rb +14517 -941
- data/lib/aws-sdk-s3/client_api.rb +1296 -197
- data/lib/aws-sdk-s3/customizations/bucket.rb +56 -37
- data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
- data/lib/aws-sdk-s3/customizations/multipart_upload.rb +2 -0
- data/lib/aws-sdk-s3/customizations/object.rb +288 -68
- data/lib/aws-sdk-s3/customizations/object_summary.rb +10 -0
- data/lib/aws-sdk-s3/customizations/object_version.rb +13 -0
- data/lib/aws-sdk-s3/customizations/types/list_object_versions_output.rb +2 -0
- data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
- data/lib/aws-sdk-s3/customizations.rb +27 -28
- data/lib/aws-sdk-s3/encryption/client.rb +28 -7
- data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +71 -29
- data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +43 -5
- data/lib/aws-sdk-s3/encryption/default_key_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +13 -2
- data/lib/aws-sdk-s3/encryption/errors.rb +2 -0
- data/lib/aws-sdk-s3/encryption/io_auth_decrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryption/io_decrypter.rb +11 -3
- data/lib/aws-sdk-s3/encryption/io_encrypter.rb +2 -0
- data/lib/aws-sdk-s3/encryption/key_provider.rb +2 -0
- data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +46 -11
- data/lib/aws-sdk-s3/encryption/materials.rb +8 -6
- data/lib/aws-sdk-s3/encryption/utils.rb +25 -0
- data/lib/aws-sdk-s3/encryption.rb +4 -0
- data/lib/aws-sdk-s3/encryptionV2/client.rb +570 -0
- data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +223 -0
- data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +170 -0
- data/lib/aws-sdk-s3/encryptionV2/default_key_provider.rb +40 -0
- data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +65 -0
- data/lib/aws-sdk-s3/encryptionV2/errors.rb +37 -0
- data/lib/aws-sdk-s3/encryptionV2/io_auth_decrypter.rb +58 -0
- data/lib/aws-sdk-s3/encryptionV2/io_decrypter.rb +37 -0
- data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +73 -0
- data/lib/aws-sdk-s3/encryptionV2/key_provider.rb +31 -0
- data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +173 -0
- data/lib/aws-sdk-s3/encryptionV2/materials.rb +60 -0
- data/lib/aws-sdk-s3/encryptionV2/utils.rb +103 -0
- data/lib/aws-sdk-s3/encryption_v2.rb +23 -0
- data/lib/aws-sdk-s3/endpoint_parameters.rb +181 -0
- data/lib/aws-sdk-s3/endpoint_provider.rb +716 -0
- data/lib/aws-sdk-s3/endpoints.rb +1434 -0
- data/lib/aws-sdk-s3/errors.rb +170 -1
- data/lib/aws-sdk-s3/event_streams.rb +8 -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 +161 -46
- data/lib/aws-sdk-s3/file_part.rb +11 -6
- data/lib/aws-sdk-s3/file_uploader.rb +39 -18
- data/lib/aws-sdk-s3/legacy_signer.rb +17 -25
- data/lib/aws-sdk-s3/multipart_file_uploader.rb +104 -27
- data/lib/aws-sdk-s3/multipart_stream_uploader.rb +61 -21
- data/lib/aws-sdk-s3/multipart_upload.rb +342 -32
- data/lib/aws-sdk-s3/multipart_upload_error.rb +2 -0
- data/lib/aws-sdk-s3/multipart_upload_part.rb +384 -46
- data/lib/aws-sdk-s3/object.rb +2600 -231
- data/lib/aws-sdk-s3/object_acl.rb +103 -25
- data/lib/aws-sdk-s3/object_copier.rb +9 -5
- data/lib/aws-sdk-s3/object_multipart_copier.rb +48 -22
- data/lib/aws-sdk-s3/object_summary.rb +2174 -204
- data/lib/aws-sdk-s3/object_version.rb +539 -80
- data/lib/aws-sdk-s3/plugins/accelerate.rb +17 -64
- 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 +7 -43
- data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +20 -3
- data/lib/aws-sdk-s3/plugins/checksum_algorithm.rb +31 -0
- data/lib/aws-sdk-s3/plugins/dualstack.rb +7 -50
- data/lib/aws-sdk-s3/plugins/endpoints.rb +86 -0
- data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +5 -4
- data/lib/aws-sdk-s3/plugins/express_session_auth.rb +88 -0
- data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +3 -1
- data/lib/aws-sdk-s3/plugins/http_200_errors.rb +62 -17
- data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +44 -0
- data/lib/aws-sdk-s3/plugins/location_constraint.rb +5 -1
- data/lib/aws-sdk-s3/plugins/md5s.rb +14 -70
- data/lib/aws-sdk-s3/plugins/redirects.rb +2 -0
- data/lib/aws-sdk-s3/plugins/s3_host_id.rb +2 -0
- data/lib/aws-sdk-s3/plugins/s3_signer.rb +63 -94
- data/lib/aws-sdk-s3/plugins/sse_cpk.rb +3 -1
- data/lib/aws-sdk-s3/plugins/streaming_retry.rb +139 -0
- data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +2 -0
- data/lib/aws-sdk-s3/presigned_post.rb +160 -99
- data/lib/aws-sdk-s3/presigner.rb +141 -62
- data/lib/aws-sdk-s3/resource.rb +156 -17
- data/lib/aws-sdk-s3/types.rb +13021 -4106
- data/lib/aws-sdk-s3/waiters.rb +67 -1
- data/lib/aws-sdk-s3.rb +46 -32
- data/sig/bucket.rbs +222 -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 +2472 -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 +42 -0
- data/sig/multipart_upload.rbs +120 -0
- data/sig/multipart_upload_part.rbs +109 -0
- data/sig/object.rbs +459 -0
- data/sig/object_acl.rbs +86 -0
- data/sig/object_summary.rbs +345 -0
- data/sig/object_version.rbs +143 -0
- data/sig/resource.rbs +134 -0
- data/sig/types.rbs +2712 -0
- data/sig/waiters.rbs +95 -0
- metadata +74 -15
@@ -1,14 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Aws
|
2
4
|
module S3
|
3
5
|
class Object
|
4
|
-
|
5
6
|
alias size content_length
|
6
7
|
|
8
|
+
# Make the method redefinable
|
9
|
+
alias_method :copy_from, :copy_from
|
10
|
+
|
7
11
|
# Copies another object to this object. Use `multipart_copy: true`
|
8
12
|
# for large objects. This is required for objects that exceed 5GB.
|
9
13
|
#
|
10
|
-
# @param [S3::Object, S3::ObjectVersion, S3::ObjectSummary, String, Hash]
|
11
|
-
# Where to copy object data from. `source` must be one of the
|
14
|
+
# @param [S3::Object, S3::ObjectVersion, S3::ObjectSummary, String, Hash]
|
15
|
+
# source Where to copy object data from. `source` must be one of the
|
16
|
+
# following:
|
12
17
|
#
|
13
18
|
# * {Aws::S3::Object}
|
14
19
|
# * {Aws::S3::ObjectSummary}
|
@@ -22,10 +27,14 @@ module Aws
|
|
22
27
|
# necessary for objects larger than 5GB and can provide
|
23
28
|
# performance improvements on large objects. Amazon S3 does
|
24
29
|
# not accept multipart copies for objects smaller than 5MB.
|
30
|
+
# Object metadata such as Content-Type will be copied, however,
|
31
|
+
# Checksums are not copied.
|
25
32
|
#
|
26
33
|
# @option options [Integer] :content_length Only used when
|
27
34
|
# `:multipart_copy` is `true`. Passing this options avoids a HEAD
|
28
|
-
# request to query the source object size
|
35
|
+
# request to query the source object size but prevents object metadata
|
36
|
+
# from being copied. Raises an `ArgumentError` if
|
37
|
+
# this option is provided when `:multipart_copy` is `false` or not set.
|
29
38
|
#
|
30
39
|
# @option options [S3::Client] :copy_source_client Only used when
|
31
40
|
# `:multipart_copy` is `true` and the source object is in a
|
@@ -37,6 +46,14 @@ module Aws
|
|
37
46
|
# different region. You do not need to specify this option
|
38
47
|
# if you have provided a `:source_client` or a `:content_length`.
|
39
48
|
#
|
49
|
+
# @option options [Boolean] :use_source_parts (false) Only used when
|
50
|
+
# `:multipart_copy` is `true`. Use part sizes defined on the source
|
51
|
+
# object if any exist. If copying or moving an object that
|
52
|
+
# is already multipart, this does not re-part the object, instead
|
53
|
+
# re-using the part definitions on the original. That means the etag
|
54
|
+
# and any checksums will not change. This is especially useful if the
|
55
|
+
# source object has parts with varied sizes.
|
56
|
+
#
|
40
57
|
# @example Basic object copy
|
41
58
|
#
|
42
59
|
# bucket = Aws::S3::Bucket.new('target-bucket')
|
@@ -59,11 +76,13 @@ module Aws
|
|
59
76
|
# @see #copy_to
|
60
77
|
#
|
61
78
|
def copy_from(source, options = {})
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
79
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
80
|
+
if Hash === source && source[:copy_source]
|
81
|
+
# for backwards compatibility
|
82
|
+
@client.copy_object(source.merge(bucket: bucket_name, key: key))
|
83
|
+
else
|
84
|
+
ObjectCopier.new(self, options).copy_from(source, options)
|
85
|
+
end
|
67
86
|
end
|
68
87
|
end
|
69
88
|
|
@@ -100,11 +119,14 @@ module Aws
|
|
100
119
|
# object.copy_to('src-bucket/src-key', multipart_copy: true)
|
101
120
|
#
|
102
121
|
def copy_to(target, options = {})
|
103
|
-
|
122
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
123
|
+
ObjectCopier.new(self, options).copy_to(target, options)
|
124
|
+
end
|
104
125
|
end
|
105
126
|
|
106
|
-
# Copies and deletes the current object. The object will only be
|
107
|
-
#
|
127
|
+
# Copies and deletes the current object. The object will only be deleted
|
128
|
+
# if the copy operation succeeds.
|
129
|
+
#
|
108
130
|
# @param (see Object#copy_to)
|
109
131
|
# @option (see Object#copy_to)
|
110
132
|
# @return [void]
|
@@ -129,10 +151,7 @@ module Aws
|
|
129
151
|
client.config.credentials,
|
130
152
|
client.config.region,
|
131
153
|
bucket_name,
|
132
|
-
{
|
133
|
-
key: key,
|
134
|
-
url: bucket.url,
|
135
|
-
}.merge(options)
|
154
|
+
{ key: key, url: bucket.url }.merge(options)
|
136
155
|
)
|
137
156
|
end
|
138
157
|
|
@@ -149,21 +168,35 @@ module Aws
|
|
149
168
|
# obj.presigned_url(:put, acl: 'public-read')
|
150
169
|
# #=> "https://bucket-name.s3.amazonaws.com/object-key?..."
|
151
170
|
#
|
152
|
-
# @
|
153
|
-
#
|
154
|
-
#
|
171
|
+
# @example Pre-signed UploadPart PUT
|
172
|
+
#
|
173
|
+
# # the object uploaded using this URL will be publicly accessible
|
174
|
+
# obj.presigned_url(:upload_part, part_number: 1, upload_id: 'uploadIdToken')
|
175
|
+
# #=> "https://bucket-name.s3.amazonaws.com/object-key?..."
|
176
|
+
#
|
177
|
+
# @param [Symbol] method
|
178
|
+
# The S3 operation to generate a presigned URL for. Valid values
|
179
|
+
# are `:get`, `:put`, `:head`, `:delete`, `:create_multipart_upload`,
|
180
|
+
# `:list_multipart_uploads`, `:complete_multipart_upload`,
|
181
|
+
# `:abort_multipart_upload`, `:list_parts`, and `:upload_part`.
|
155
182
|
#
|
156
183
|
# @param [Hash] params
|
157
184
|
# Additional request parameters to use when generating the pre-signed
|
158
185
|
# URL. See the related documentation in {Client} for accepted
|
159
186
|
# params.
|
160
187
|
#
|
161
|
-
# |
|
162
|
-
#
|
163
|
-
# | `:get`
|
164
|
-
# | `:put`
|
165
|
-
# | `:head`
|
166
|
-
# | `:delete`
|
188
|
+
# | Method | Client Method |
|
189
|
+
# |------------------------------|------------------------------------|
|
190
|
+
# | `:get` | {Client#get_object} |
|
191
|
+
# | `:put` | {Client#put_object} |
|
192
|
+
# | `:head` | {Client#head_object} |
|
193
|
+
# | `:delete` | {Client#delete_object} |
|
194
|
+
# | `:create_multipart_upload` | {Client#create_multipart_upload} |
|
195
|
+
# | `:list_multipart_uploads` | {Client#list_multipart_uploads} |
|
196
|
+
# | `:complete_multipart_upload` | {Client#complete_multipart_upload} |
|
197
|
+
# | `:abort_multipart_upload` | {Client#abort_multipart_upload} |
|
198
|
+
# | `:list_parts` | {Client#list_parts} |
|
199
|
+
# | `:upload_part` | {Client#upload_part} |
|
167
200
|
#
|
168
201
|
# @option params [Boolean] :virtual_host (false) When `true` the
|
169
202
|
# presigned URL will use the bucket name as a virtual host.
|
@@ -184,12 +217,90 @@ module Aws
|
|
184
217
|
#
|
185
218
|
# @return [String]
|
186
219
|
#
|
187
|
-
def presigned_url(
|
220
|
+
def presigned_url(method, params = {})
|
188
221
|
presigner = Presigner.new(client: client)
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
222
|
+
|
223
|
+
if %w(delete head get put).include?(method.to_s)
|
224
|
+
method = "#{method}_object".to_sym
|
225
|
+
end
|
226
|
+
|
227
|
+
presigner.presigned_url(
|
228
|
+
method.downcase,
|
229
|
+
params.merge(bucket: bucket_name, key: key)
|
230
|
+
)
|
231
|
+
end
|
232
|
+
|
233
|
+
# Allows you to create presigned URL requests for S3 operations. This
|
234
|
+
# method returns a tuple containing the URL and the signed X-amz-* headers
|
235
|
+
# to be used with the presigned url.
|
236
|
+
#
|
237
|
+
# @example Pre-signed GET URL, valid for one hour
|
238
|
+
#
|
239
|
+
# obj.presigned_request(:get, expires_in: 3600)
|
240
|
+
# #=> ["https://bucket-name.s3.amazonaws.com/object-key?...", {}]
|
241
|
+
#
|
242
|
+
# @example Pre-signed PUT with a canned ACL
|
243
|
+
#
|
244
|
+
# # the object uploaded using this URL will be publicly accessible
|
245
|
+
# obj.presigned_request(:put, acl: 'public-read')
|
246
|
+
# #=> ["https://bucket-name.s3.amazonaws.com/object-key?...",
|
247
|
+
# {"x-amz-acl"=>"public-read"}]
|
248
|
+
#
|
249
|
+
# @param [Symbol] method
|
250
|
+
# The S3 operation to generate a presigned request for. Valid values
|
251
|
+
# are `:get`, `:put`, `:head`, `:delete`, `:create_multipart_upload`,
|
252
|
+
# `:list_multipart_uploads`, `:complete_multipart_upload`,
|
253
|
+
# `:abort_multipart_upload`, `:list_parts`, and `:upload_part`.
|
254
|
+
#
|
255
|
+
# @param [Hash] params
|
256
|
+
# Additional request parameters to use when generating the pre-signed
|
257
|
+
# request. See the related documentation in {Client} for accepted
|
258
|
+
# params.
|
259
|
+
#
|
260
|
+
# | Method | Client Method |
|
261
|
+
# |------------------------------|------------------------------------|
|
262
|
+
# | `:get` | {Client#get_object} |
|
263
|
+
# | `:put` | {Client#put_object} |
|
264
|
+
# | `:head` | {Client#head_object} |
|
265
|
+
# | `:delete` | {Client#delete_object} |
|
266
|
+
# | `:create_multipart_upload` | {Client#create_multipart_upload} |
|
267
|
+
# | `:list_multipart_uploads` | {Client#list_multipart_uploads} |
|
268
|
+
# | `:complete_multipart_upload` | {Client#complete_multipart_upload} |
|
269
|
+
# | `:abort_multipart_upload` | {Client#abort_multipart_upload} |
|
270
|
+
# | `:list_parts` | {Client#list_parts} |
|
271
|
+
# | `:upload_part` | {Client#upload_part} |
|
272
|
+
#
|
273
|
+
# @option params [Boolean] :virtual_host (false) When `true` the
|
274
|
+
# presigned URL will use the bucket name as a virtual host.
|
275
|
+
#
|
276
|
+
# bucket = Aws::S3::Bucket.new('my.bucket.com')
|
277
|
+
# bucket.object('key').presigned_request(virtual_host: true)
|
278
|
+
# #=> ["http://my.bucket.com/key?...", {}]
|
279
|
+
#
|
280
|
+
# @option params [Integer] :expires_in (900) Number of seconds before
|
281
|
+
# the pre-signed URL expires. This may not exceed one week (604800
|
282
|
+
# seconds). Note that the pre-signed URL is also only valid as long as
|
283
|
+
# credentials used to sign it are. For example, when using IAM roles,
|
284
|
+
# temporary tokens generated for signing also have a default expiration
|
285
|
+
# which will affect the effective expiration of the pre-signed URL.
|
286
|
+
#
|
287
|
+
# @raise [ArgumentError] Raised if `:expires_in` exceeds one week
|
288
|
+
# (604800 seconds).
|
289
|
+
#
|
290
|
+
# @return [String, Hash] A tuple with a presigned URL and headers that
|
291
|
+
# should be included with the request.
|
292
|
+
#
|
293
|
+
def presigned_request(method, params = {})
|
294
|
+
presigner = Presigner.new(client: client)
|
295
|
+
|
296
|
+
if %w(delete head get put).include?(method.to_s)
|
297
|
+
method = "#{method}_object".to_sym
|
298
|
+
end
|
299
|
+
|
300
|
+
presigner.presigned_request(
|
301
|
+
method.downcase,
|
302
|
+
params.merge(bucket: bucket_name, key: key)
|
303
|
+
)
|
193
304
|
end
|
194
305
|
|
195
306
|
# Returns the public (un-signed) URL for this object.
|
@@ -197,15 +308,22 @@ module Aws
|
|
197
308
|
# s3.bucket('bucket-name').object('obj-key').public_url
|
198
309
|
# #=> "https://bucket-name.s3.amazonaws.com/obj-key"
|
199
310
|
#
|
200
|
-
# To use virtual hosted bucket url
|
311
|
+
# To use virtual hosted bucket url.
|
312
|
+
# Uses https unless secure: false is set. If the bucket
|
313
|
+
# name contains dots (.) then you will need to set secure: false.
|
201
314
|
#
|
202
|
-
# s3.bucket('my
|
203
|
-
#
|
315
|
+
# s3.bucket('my-bucket.com').object('key')
|
316
|
+
# .public_url(virtual_host: true)
|
317
|
+
# #=> "https://my-bucket.com/key"
|
204
318
|
#
|
205
319
|
# @option options [Boolean] :virtual_host (false) When `true`, the bucket
|
206
320
|
# name will be used as the host name. This is useful when you have
|
207
321
|
# a CNAME configured for the bucket.
|
208
322
|
#
|
323
|
+
# @option options [Boolean] :secure (true) When `false`, http
|
324
|
+
# will be used with virtual_host. This is required when
|
325
|
+
# the bucket name has a dot (.) in it.
|
326
|
+
#
|
209
327
|
# @return [String]
|
210
328
|
def public_url(options = {})
|
211
329
|
url = URI.parse(bucket.url(options))
|
@@ -216,11 +334,12 @@ module Aws
|
|
216
334
|
|
217
335
|
# Uploads a stream in a streaming fashion to the current object in S3.
|
218
336
|
#
|
219
|
-
#
|
220
|
-
#
|
221
|
-
#
|
337
|
+
# Passed chunks automatically split into multipart upload parts and the
|
338
|
+
# parts are uploaded in parallel. This allows for streaming uploads that
|
339
|
+
# never touch the disk.
|
222
340
|
#
|
223
|
-
#
|
341
|
+
# Note that this is known to have issues in JRuby until jruby-9.1.15.0,
|
342
|
+
# so avoid using this with older versions of JRuby.
|
224
343
|
#
|
225
344
|
# @example Streaming chunks of data
|
226
345
|
# obj.upload_stream do |write_stream|
|
@@ -234,18 +353,20 @@ module Aws
|
|
234
353
|
# obj.upload_stream do |write_stream|
|
235
354
|
# IO.copy_stream(STDIN, write_stream)
|
236
355
|
# end
|
356
|
+
# @param [Hash] options
|
357
|
+
# Additional options for {Client#create_multipart_upload},
|
358
|
+
# {Client#complete_multipart_upload},
|
359
|
+
# and {Client#upload_part} can be provided.
|
237
360
|
#
|
238
|
-
# @option options [Integer] :thread_count
|
239
|
-
#
|
240
|
-
# Default `:thread_count` is `10`.
|
361
|
+
# @option options [Integer] :thread_count (10) The number of parallel
|
362
|
+
# multipart uploads
|
241
363
|
#
|
242
|
-
# @option options [Boolean] :tempfile
|
243
|
-
#
|
244
|
-
#
|
364
|
+
# @option options [Boolean] :tempfile (false) Normally read data is stored
|
365
|
+
# in memory when building the parts in order to complete the underlying
|
366
|
+
# multipart upload. By passing `:tempfile => true` data read will be
|
245
367
|
# temporarily stored on disk reducing the memory footprint vastly.
|
246
|
-
# Default `:tempfile` is `false`.
|
247
368
|
#
|
248
|
-
# @option options [Integer] :part_size
|
369
|
+
# @option options [Integer] :part_size (5242880)
|
249
370
|
# Define how big each part size but the last should be.
|
250
371
|
# Default `:part_size` is `5 * 1024 * 1024`.
|
251
372
|
#
|
@@ -258,15 +379,23 @@ module Aws
|
|
258
379
|
# @return [Boolean] Returns `true` when the object is uploaded
|
259
380
|
# without any errors.
|
260
381
|
#
|
382
|
+
# @see Client#create_multipart_upload
|
383
|
+
# @see Client#complete_multipart_upload
|
384
|
+
# @see Client#upload_part
|
261
385
|
def upload_stream(options = {}, &block)
|
262
386
|
uploading_options = options.dup
|
263
387
|
uploader = MultipartStreamUploader.new(
|
264
388
|
client: client,
|
265
389
|
thread_count: uploading_options.delete(:thread_count),
|
266
390
|
tempfile: uploading_options.delete(:tempfile),
|
267
|
-
part_size: uploading_options.delete(:part_size)
|
391
|
+
part_size: uploading_options.delete(:part_size)
|
268
392
|
)
|
269
|
-
|
393
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
394
|
+
uploader.upload(
|
395
|
+
uploading_options.merge(bucket: bucket_name, key: key),
|
396
|
+
&block
|
397
|
+
)
|
398
|
+
end
|
270
399
|
true
|
271
400
|
end
|
272
401
|
|
@@ -275,21 +404,55 @@ module Aws
|
|
275
404
|
# # small files are uploaded in a single API call
|
276
405
|
# obj.upload_file('/path/to/file')
|
277
406
|
#
|
278
|
-
# Files larger than `:multipart_threshold` are uploaded
|
279
|
-
# Amazon S3 multipart upload APIs.
|
407
|
+
# Files larger than or equal to `:multipart_threshold` are uploaded
|
408
|
+
# using the Amazon S3 multipart upload APIs.
|
280
409
|
#
|
281
410
|
# # large files are automatically split into parts
|
282
411
|
# # and the parts are uploaded in parallel
|
283
412
|
# obj.upload_file('/path/to/very_large_file')
|
284
413
|
#
|
285
|
-
#
|
286
|
-
#
|
287
|
-
#
|
288
|
-
#
|
414
|
+
# The response of the S3 upload API is yielded if a block given.
|
415
|
+
#
|
416
|
+
# # API response will have etag value of the file
|
417
|
+
# obj.upload_file('/path/to/file') do |response|
|
418
|
+
# etag = response.etag
|
419
|
+
# end
|
420
|
+
#
|
421
|
+
# You can provide a callback to monitor progress of the upload:
|
289
422
|
#
|
290
|
-
#
|
291
|
-
#
|
292
|
-
#
|
423
|
+
# # bytes and totals are each an array with 1 entry per part
|
424
|
+
# progress = Proc.new do |bytes, totals|
|
425
|
+
# puts bytes.map.with_index { |b, i| "Part #{i+1}: #{b} / #{totals[i]}"}.join(' ') + "Total: #{100.0 * bytes.sum / totals.sum }%" }
|
426
|
+
# end
|
427
|
+
# obj.upload_file('/path/to/file', progress_callback: progress)
|
428
|
+
#
|
429
|
+
# @param [String, Pathname, File, Tempfile] source A file on the local
|
430
|
+
# file system that will be uploaded as this object. This can either be
|
431
|
+
# a String or Pathname to the file, an open File object, or an open
|
432
|
+
# Tempfile object. If you pass an open File or Tempfile object, then
|
433
|
+
# you are responsible for closing it after the upload completes. When
|
434
|
+
# using an open Tempfile, rewind it before uploading or else the object
|
435
|
+
# will be empty.
|
436
|
+
#
|
437
|
+
# @param [Hash] options
|
438
|
+
# Additional options for {Client#put_object}
|
439
|
+
# when file sizes below the multipart threshold. For files larger than
|
440
|
+
# the multipart threshold, options for {Client#create_multipart_upload},
|
441
|
+
# {Client#complete_multipart_upload},
|
442
|
+
# and {Client#upload_part} can be provided.
|
443
|
+
#
|
444
|
+
# @option options [Integer] :multipart_threshold (104857600) Files larger
|
445
|
+
# than or equal to `:multipart_threshold` are uploaded using the S3
|
446
|
+
# multipart APIs.
|
447
|
+
# Default threshold is 100MB.
|
448
|
+
#
|
449
|
+
# @option options [Integer] :thread_count (10) The number of parallel
|
450
|
+
# multipart uploads. This option is not used if the file is smaller than
|
451
|
+
# `:multipart_threshold`.
|
452
|
+
#
|
453
|
+
# @option options [Proc] :progress_callback
|
454
|
+
# A Proc that will be called when each chunk of the upload is sent.
|
455
|
+
# It will be invoked with [bytes_read], [total_sizes]
|
293
456
|
#
|
294
457
|
# @raise [MultipartUploadError] If an object is being uploaded in
|
295
458
|
# parts, and the upload can not be completed, then the upload is
|
@@ -300,12 +463,23 @@ module Aws
|
|
300
463
|
# @return [Boolean] Returns `true` when the object is uploaded
|
301
464
|
# without any errors.
|
302
465
|
#
|
466
|
+
# @see Client#put_object
|
467
|
+
# @see Client#create_multipart_upload
|
468
|
+
# @see Client#complete_multipart_upload
|
469
|
+
# @see Client#upload_part
|
303
470
|
def upload_file(source, options = {})
|
304
471
|
uploading_options = options.dup
|
305
472
|
uploader = FileUploader.new(
|
306
473
|
multipart_threshold: uploading_options.delete(:multipart_threshold),
|
307
|
-
client: client
|
308
|
-
|
474
|
+
client: client
|
475
|
+
)
|
476
|
+
response = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
477
|
+
uploader.upload(
|
478
|
+
source,
|
479
|
+
uploading_options.merge(bucket: bucket_name, key: key)
|
480
|
+
)
|
481
|
+
end
|
482
|
+
yield response if block_given?
|
309
483
|
true
|
310
484
|
end
|
311
485
|
|
@@ -320,7 +494,20 @@ module Aws
|
|
320
494
|
# # and the parts are downloaded in parallel
|
321
495
|
# obj.download_file('/path/to/very_large_file')
|
322
496
|
#
|
323
|
-
#
|
497
|
+
# You can provide a callback to monitor progress of the download:
|
498
|
+
#
|
499
|
+
# # bytes and part_sizes are each an array with 1 entry per part
|
500
|
+
# # part_sizes may not be known until the first bytes are retrieved
|
501
|
+
# progress = Proc.new do |bytes, part_sizes, file_size|
|
502
|
+
# puts bytes.map.with_index { |b, i| "Part #{i+1}: #{b} / #{part_sizes[i]}"}.join(' ') + "Total: #{100.0 * bytes.sum / file_size}%" }
|
503
|
+
# end
|
504
|
+
# obj.download_file('/path/to/file', progress_callback: progress)
|
505
|
+
#
|
506
|
+
# @param [String] destination Where to download the file to.
|
507
|
+
#
|
508
|
+
# @param [Hash] options
|
509
|
+
# Additional options for {Client#get_object} and #{Client#head_object}
|
510
|
+
# may be provided.
|
324
511
|
#
|
325
512
|
# @option options [String] mode `auto`, `single_request`, `get_range`
|
326
513
|
# `single_request` mode forces only 1 GET request is made in download,
|
@@ -328,23 +515,56 @@ module Aws
|
|
328
515
|
# customizing each range size in multipart_download,
|
329
516
|
# By default, `auto` mode is enabled, which performs multipart_download
|
330
517
|
#
|
331
|
-
# @option options [
|
518
|
+
# @option options [Integer] chunk_size required in get_range mode.
|
332
519
|
#
|
333
|
-
# @option options [
|
334
|
-
#
|
520
|
+
# @option options [Integer] thread_count (10) Customize threads used in
|
521
|
+
# the multipart download.
|
335
522
|
#
|
336
|
-
# @option options [String] version_id The object version id used to
|
337
|
-
# the object
|
523
|
+
# @option options [String] version_id The object version id used to
|
524
|
+
# retrieve the object. For more about object versioning, see:
|
338
525
|
# https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html
|
339
526
|
#
|
340
|
-
# @
|
341
|
-
#
|
527
|
+
# @option options [String] checksum_mode (ENABLED) When `ENABLED` and
|
528
|
+
# the object has a stored checksum, it will be used to validate the
|
529
|
+
# download and will raise an `Aws::Errors::ChecksumError` if
|
530
|
+
# checksum validation fails. You may provide a `on_checksum_validated`
|
531
|
+
# callback if you need to verify that validation occurred and which
|
532
|
+
# algorithm was used. To disable checksum validation, set
|
533
|
+
# `checksum_mode` to "DISABLED".
|
534
|
+
#
|
535
|
+
# @option options [Callable] on_checksum_validated Called each time a
|
536
|
+
# request's checksum is validated with the checksum algorithm and the
|
537
|
+
# response. For multipart downloads, this will be called for each
|
538
|
+
# part that is downloaded and validated.
|
539
|
+
#
|
540
|
+
# @option options [Proc] :progress_callback
|
541
|
+
# A Proc that will be called when each chunk of the download is received.
|
542
|
+
# It will be invoked with [bytes_read], [part_sizes], file_size.
|
543
|
+
# When the object is downloaded as parts (rather than by ranges), the
|
544
|
+
# part_sizes will not be known ahead of time and will be nil in the
|
545
|
+
# callback until the first bytes in the part are received.
|
546
|
+
#
|
547
|
+
# @return [Boolean] Returns `true` when the file is downloaded without
|
548
|
+
# any errors.
|
549
|
+
#
|
550
|
+
# @see Client#get_object
|
551
|
+
# @see Client#head_object
|
342
552
|
def download_file(destination, options = {})
|
343
553
|
downloader = FileDownloader.new(client: client)
|
344
|
-
|
345
|
-
|
554
|
+
Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
|
555
|
+
downloader.download(
|
556
|
+
destination,
|
557
|
+
options.merge(bucket: bucket_name, key: key)
|
558
|
+
)
|
559
|
+
end
|
346
560
|
true
|
347
561
|
end
|
562
|
+
|
563
|
+
class Collection < Aws::Resources::Collection
|
564
|
+
alias_method :delete, :batch_delete!
|
565
|
+
extend Aws::Deprecations
|
566
|
+
deprecated :delete, use: :batch_delete!
|
567
|
+
end
|
348
568
|
end
|
349
569
|
end
|
350
570
|
end
|
@@ -1,9 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Aws
|
2
4
|
module S3
|
3
5
|
class ObjectSummary
|
4
6
|
|
5
7
|
alias content_length size
|
6
8
|
|
9
|
+
# Make the method redefinable
|
10
|
+
alias_method :copy_from, :copy_from
|
11
|
+
|
7
12
|
# @param (see Object#copy_from)
|
8
13
|
# @options (see Object#copy_from)
|
9
14
|
# @return (see Object#copy_from)
|
@@ -75,6 +80,11 @@ module Aws
|
|
75
80
|
object.download_file(destination, options)
|
76
81
|
end
|
77
82
|
|
83
|
+
class Collection < Aws::Resources::Collection
|
84
|
+
alias_method :delete, :batch_delete!
|
85
|
+
extend Aws::Deprecations
|
86
|
+
deprecated :delete, use: :batch_delete!
|
87
|
+
end
|
78
88
|
end
|
79
89
|
end
|
80
90
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
module S3
|
5
|
+
class ObjectVersion
|
6
|
+
class Collection < Aws::Resources::Collection
|
7
|
+
alias_method :delete, :batch_delete!
|
8
|
+
extend Aws::Deprecations
|
9
|
+
deprecated :delete, use: :batch_delete!
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
module S3
|
5
|
+
module Types
|
6
|
+
# This error is not modeled.
|
7
|
+
#
|
8
|
+
# The bucket you are attempting to access must be addressed using the
|
9
|
+
# specified endpoint. Please send all future requests to this endpoint.
|
10
|
+
#
|
11
|
+
# @!attribute [rw] endpoint
|
12
|
+
# @return [String]
|
13
|
+
#
|
14
|
+
# @!attribute [rw] bucket
|
15
|
+
# @return [String]
|
16
|
+
#
|
17
|
+
# @!attribute [rw] message
|
18
|
+
# @return [String]
|
19
|
+
#
|
20
|
+
class PermanentRedirect < Struct.new(:endpoint, :bucket, :region, :message)
|
21
|
+
SENSITIVE = []
|
22
|
+
include Aws::Structure
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,31 +1,30 @@
|
|
1
|
-
#
|
2
|
-
require 'aws-sdk-s3/bucket_region_cache'
|
3
|
-
require 'aws-sdk-s3/encryption'
|
4
|
-
require 'aws-sdk-s3/file_part'
|
5
|
-
require 'aws-sdk-s3/file_uploader'
|
6
|
-
require 'aws-sdk-s3/file_downloader'
|
7
|
-
require 'aws-sdk-s3/legacy_signer'
|
8
|
-
require 'aws-sdk-s3/multipart_file_uploader'
|
9
|
-
require 'aws-sdk-s3/multipart_stream_uploader'
|
10
|
-
require 'aws-sdk-s3/multipart_upload_error'
|
11
|
-
require 'aws-sdk-s3/object_copier'
|
12
|
-
require 'aws-sdk-s3/object_multipart_copier'
|
13
|
-
require 'aws-sdk-s3/presigned_post'
|
14
|
-
require 'aws-sdk-s3/presigner'
|
1
|
+
# frozen_string_literal: true
|
15
2
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
3
|
+
module Aws
|
4
|
+
module S3
|
5
|
+
# utility classes
|
6
|
+
autoload :BucketRegionCache, 'aws-sdk-s3/bucket_region_cache'
|
7
|
+
autoload :Encryption, 'aws-sdk-s3/encryption'
|
8
|
+
autoload :EncryptionV2, 'aws-sdk-s3/encryption_v2'
|
9
|
+
autoload :FilePart, 'aws-sdk-s3/file_part'
|
10
|
+
autoload :FileUploader, 'aws-sdk-s3/file_uploader'
|
11
|
+
autoload :FileDownloader, 'aws-sdk-s3/file_downloader'
|
12
|
+
autoload :LegacySigner, 'aws-sdk-s3/legacy_signer'
|
13
|
+
autoload :MultipartFileUploader, 'aws-sdk-s3/multipart_file_uploader'
|
14
|
+
autoload :MultipartStreamUploader, 'aws-sdk-s3/multipart_stream_uploader'
|
15
|
+
autoload :MultipartUploadError, 'aws-sdk-s3/multipart_upload_error'
|
16
|
+
autoload :ObjectCopier, 'aws-sdk-s3/object_copier'
|
17
|
+
autoload :ObjectMultipartCopier, 'aws-sdk-s3/object_multipart_copier'
|
18
|
+
autoload :PresignedPost, 'aws-sdk-s3/presigned_post'
|
19
|
+
autoload :Presigner, 'aws-sdk-s3/presigner'
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
21
|
+
# s3 express session auth
|
22
|
+
autoload :ExpressCredentials, 'aws-sdk-s3/express_credentials'
|
23
|
+
autoload :ExpressCredentialsProvider, 'aws-sdk-s3/express_credentials_provider'
|
24
|
+
|
25
|
+
# s3 access grants auth
|
26
|
+
|
27
|
+
autoload :AccessGrantsCredentials, 'aws-sdk-s3/access_grants_credentials'
|
28
|
+
autoload :AccessGrantsCredentialsProvider, 'aws-sdk-s3/access_grants_credentials_provider'
|
29
|
+
end
|
31
30
|
end
|