aws-sdk-s3 1.36.1 → 1.56.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aws-sdk-s3/bucket.rb +158 -34
  3. data/lib/aws-sdk-s3/bucket_acl.rb +10 -1
  4. data/lib/aws-sdk-s3/bucket_cors.rb +17 -1
  5. data/lib/aws-sdk-s3/bucket_lifecycle.rb +1 -1
  6. data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +2 -1
  7. data/lib/aws-sdk-s3/bucket_logging.rb +10 -3
  8. data/lib/aws-sdk-s3/bucket_notification.rb +6 -3
  9. data/lib/aws-sdk-s3/bucket_policy.rb +1 -0
  10. data/lib/aws-sdk-s3/bucket_request_payment.rb +9 -0
  11. data/lib/aws-sdk-s3/bucket_tagging.rb +9 -1
  12. data/lib/aws-sdk-s3/bucket_versioning.rb +25 -0
  13. data/lib/aws-sdk-s3/bucket_website.rb +14 -4
  14. data/lib/aws-sdk-s3/client.rb +4636 -301
  15. data/lib/aws-sdk-s3/client_api.rb +22 -0
  16. data/lib/aws-sdk-s3/customizations/bucket.rb +4 -0
  17. data/lib/aws-sdk-s3/customizations/object.rb +65 -43
  18. data/lib/aws-sdk-s3/encryption/client.rb +4 -0
  19. data/lib/aws-sdk-s3/event_streams.rb +7 -7
  20. data/lib/aws-sdk-s3/file_part.rb +9 -6
  21. data/lib/aws-sdk-s3/file_uploader.rb +13 -12
  22. data/lib/aws-sdk-s3/multipart_file_uploader.rb +14 -11
  23. data/lib/aws-sdk-s3/multipart_upload.rb +3 -1
  24. data/lib/aws-sdk-s3/multipart_upload_part.rb +3 -1
  25. data/lib/aws-sdk-s3/object.rb +205 -32
  26. data/lib/aws-sdk-s3/object_acl.rb +17 -2
  27. data/lib/aws-sdk-s3/object_summary.rb +125 -25
  28. data/lib/aws-sdk-s3/object_version.rb +6 -2
  29. data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +59 -0
  30. data/lib/aws-sdk-s3/plugins/md5s.rb +3 -4
  31. data/lib/aws-sdk-s3/plugins/s3_signer.rb +2 -0
  32. data/lib/aws-sdk-s3/presigned_post.rb +4 -0
  33. data/lib/aws-sdk-s3/presigner.rb +44 -30
  34. data/lib/aws-sdk-s3/resource.rb +2 -0
  35. data/lib/aws-sdk-s3/types.rb +2460 -430
  36. data/lib/aws-sdk-s3.rb +1 -1
  37. metadata +7 -6
@@ -143,12 +143,15 @@ module Aws::S3
143
143
  EncodingType = Shapes::StringShape.new(name: 'EncodingType')
144
144
  Encryption = Shapes::StructureShape.new(name: 'Encryption')
145
145
  EncryptionConfiguration = Shapes::StructureShape.new(name: 'EncryptionConfiguration')
146
+ End = Shapes::IntegerShape.new(name: 'End')
146
147
  EndEvent = Shapes::StructureShape.new(name: 'EndEvent')
147
148
  Error = Shapes::StructureShape.new(name: 'Error')
148
149
  ErrorDocument = Shapes::StructureShape.new(name: 'ErrorDocument')
149
150
  Errors = Shapes::ListShape.new(name: 'Errors', flattened: true)
150
151
  Event = Shapes::StringShape.new(name: 'Event')
151
152
  EventList = Shapes::ListShape.new(name: 'EventList', flattened: true)
153
+ ExistingObjectReplication = Shapes::StructureShape.new(name: 'ExistingObjectReplication')
154
+ ExistingObjectReplicationStatus = Shapes::StringShape.new(name: 'ExistingObjectReplicationStatus')
152
155
  Expiration = Shapes::StringShape.new(name: 'Expiration')
153
156
  ExpirationStatus = Shapes::StringShape.new(name: 'ExpirationStatus')
154
157
  ExpiredObjectDeleteMarker = Shapes::BooleanShape.new(name: 'ExpiredObjectDeleteMarker')
@@ -460,8 +463,10 @@ module Aws::S3
460
463
  SSECustomerKey = Shapes::StringShape.new(name: 'SSECustomerKey')
461
464
  SSECustomerKeyMD5 = Shapes::StringShape.new(name: 'SSECustomerKeyMD5')
462
465
  SSEKMS = Shapes::StructureShape.new(name: 'SSEKMS')
466
+ SSEKMSEncryptionContext = Shapes::StringShape.new(name: 'SSEKMSEncryptionContext')
463
467
  SSEKMSKeyId = Shapes::StringShape.new(name: 'SSEKMSKeyId')
464
468
  SSES3 = Shapes::StructureShape.new(name: 'SSES3')
469
+ ScanRange = Shapes::StructureShape.new(name: 'ScanRange')
465
470
  SelectObjectContentEventStream = Shapes::StructureShape.new(name: 'SelectObjectContentEventStream')
466
471
  SelectObjectContentOutput = Shapes::StructureShape.new(name: 'SelectObjectContentOutput')
467
472
  SelectObjectContentRequest = Shapes::StructureShape.new(name: 'SelectObjectContentRequest')
@@ -476,6 +481,7 @@ module Aws::S3
476
481
  SourceSelectionCriteria = Shapes::StructureShape.new(name: 'SourceSelectionCriteria')
477
482
  SseKmsEncryptedObjects = Shapes::StructureShape.new(name: 'SseKmsEncryptedObjects')
478
483
  SseKmsEncryptedObjectsStatus = Shapes::StringShape.new(name: 'SseKmsEncryptedObjectsStatus')
484
+ Start = Shapes::IntegerShape.new(name: 'Start')
479
485
  StartAfter = Shapes::StringShape.new(name: 'StartAfter')
480
486
  Stats = Shapes::StructureShape.new(name: 'Stats')
481
487
  StatsEvent = Shapes::StructureShape.new(name: 'StatsEvent')
@@ -666,6 +672,7 @@ module Aws::S3
666
672
  CopyObjectOutput.add_member(:sse_customer_algorithm, Shapes::ShapeRef.new(shape: SSECustomerAlgorithm, location: "header", location_name: "x-amz-server-side-encryption-customer-algorithm"))
667
673
  CopyObjectOutput.add_member(:sse_customer_key_md5, Shapes::ShapeRef.new(shape: SSECustomerKeyMD5, location: "header", location_name: "x-amz-server-side-encryption-customer-key-MD5"))
668
674
  CopyObjectOutput.add_member(:ssekms_key_id, Shapes::ShapeRef.new(shape: SSEKMSKeyId, location: "header", location_name: "x-amz-server-side-encryption-aws-kms-key-id"))
675
+ CopyObjectOutput.add_member(:ssekms_encryption_context, Shapes::ShapeRef.new(shape: SSEKMSEncryptionContext, location: "header", location_name: "x-amz-server-side-encryption-context"))
669
676
  CopyObjectOutput.add_member(:request_charged, Shapes::ShapeRef.new(shape: RequestCharged, location: "header", location_name: "x-amz-request-charged"))
670
677
  CopyObjectOutput.struct_class = Types::CopyObjectOutput
671
678
  CopyObjectOutput[:payload] = :copy_object_result
@@ -699,6 +706,7 @@ module Aws::S3
699
706
  CopyObjectRequest.add_member(:sse_customer_key, Shapes::ShapeRef.new(shape: SSECustomerKey, location: "header", location_name: "x-amz-server-side-encryption-customer-key"))
700
707
  CopyObjectRequest.add_member(:sse_customer_key_md5, Shapes::ShapeRef.new(shape: SSECustomerKeyMD5, location: "header", location_name: "x-amz-server-side-encryption-customer-key-MD5"))
701
708
  CopyObjectRequest.add_member(:ssekms_key_id, Shapes::ShapeRef.new(shape: SSEKMSKeyId, location: "header", location_name: "x-amz-server-side-encryption-aws-kms-key-id"))
709
+ CopyObjectRequest.add_member(:ssekms_encryption_context, Shapes::ShapeRef.new(shape: SSEKMSEncryptionContext, location: "header", location_name: "x-amz-server-side-encryption-context"))
702
710
  CopyObjectRequest.add_member(:copy_source_sse_customer_algorithm, Shapes::ShapeRef.new(shape: CopySourceSSECustomerAlgorithm, location: "header", location_name: "x-amz-copy-source-server-side-encryption-customer-algorithm"))
703
711
  CopyObjectRequest.add_member(:copy_source_sse_customer_key, Shapes::ShapeRef.new(shape: CopySourceSSECustomerKey, location: "header", location_name: "x-amz-copy-source-server-side-encryption-customer-key"))
704
712
  CopyObjectRequest.add_member(:copy_source_sse_customer_key_md5, Shapes::ShapeRef.new(shape: CopySourceSSECustomerKeyMD5, location: "header", location_name: "x-amz-copy-source-server-side-encryption-customer-key-MD5"))
@@ -745,6 +753,7 @@ module Aws::S3
745
753
  CreateMultipartUploadOutput.add_member(:sse_customer_algorithm, Shapes::ShapeRef.new(shape: SSECustomerAlgorithm, location: "header", location_name: "x-amz-server-side-encryption-customer-algorithm"))
746
754
  CreateMultipartUploadOutput.add_member(:sse_customer_key_md5, Shapes::ShapeRef.new(shape: SSECustomerKeyMD5, location: "header", location_name: "x-amz-server-side-encryption-customer-key-MD5"))
747
755
  CreateMultipartUploadOutput.add_member(:ssekms_key_id, Shapes::ShapeRef.new(shape: SSEKMSKeyId, location: "header", location_name: "x-amz-server-side-encryption-aws-kms-key-id"))
756
+ CreateMultipartUploadOutput.add_member(:ssekms_encryption_context, Shapes::ShapeRef.new(shape: SSEKMSEncryptionContext, location: "header", location_name: "x-amz-server-side-encryption-context"))
748
757
  CreateMultipartUploadOutput.add_member(:request_charged, Shapes::ShapeRef.new(shape: RequestCharged, location: "header", location_name: "x-amz-request-charged"))
749
758
  CreateMultipartUploadOutput.struct_class = Types::CreateMultipartUploadOutput
750
759
 
@@ -769,6 +778,7 @@ module Aws::S3
769
778
  CreateMultipartUploadRequest.add_member(:sse_customer_key, Shapes::ShapeRef.new(shape: SSECustomerKey, location: "header", location_name: "x-amz-server-side-encryption-customer-key"))
770
779
  CreateMultipartUploadRequest.add_member(:sse_customer_key_md5, Shapes::ShapeRef.new(shape: SSECustomerKeyMD5, location: "header", location_name: "x-amz-server-side-encryption-customer-key-MD5"))
771
780
  CreateMultipartUploadRequest.add_member(:ssekms_key_id, Shapes::ShapeRef.new(shape: SSEKMSKeyId, location: "header", location_name: "x-amz-server-side-encryption-aws-kms-key-id"))
781
+ CreateMultipartUploadRequest.add_member(:ssekms_encryption_context, Shapes::ShapeRef.new(shape: SSEKMSEncryptionContext, location: "header", location_name: "x-amz-server-side-encryption-context"))
772
782
  CreateMultipartUploadRequest.add_member(:request_payer, Shapes::ShapeRef.new(shape: RequestPayer, location: "header", location_name: "x-amz-request-payer"))
773
783
  CreateMultipartUploadRequest.add_member(:tagging, Shapes::ShapeRef.new(shape: TaggingHeader, location: "header", location_name: "x-amz-tagging"))
774
784
  CreateMultipartUploadRequest.add_member(:object_lock_mode, Shapes::ShapeRef.new(shape: ObjectLockMode, location: "header", location_name: "x-amz-object-lock-mode"))
@@ -909,6 +919,9 @@ module Aws::S3
909
919
 
910
920
  EventList.member = Shapes::ShapeRef.new(shape: Event)
911
921
 
922
+ ExistingObjectReplication.add_member(:status, Shapes::ShapeRef.new(shape: ExistingObjectReplicationStatus, required: true, location_name: "Status"))
923
+ ExistingObjectReplication.struct_class = Types::ExistingObjectReplication
924
+
912
925
  ExposeHeaders.member = Shapes::ShapeRef.new(shape: ExposeHeader)
913
926
 
914
927
  FilterRule.add_member(:name, Shapes::ShapeRef.new(shape: FilterRuleName, location_name: "Name"))
@@ -1719,6 +1732,7 @@ module Aws::S3
1719
1732
  PutBucketReplicationRequest.add_member(:bucket, Shapes::ShapeRef.new(shape: BucketName, required: true, location: "uri", location_name: "Bucket"))
1720
1733
  PutBucketReplicationRequest.add_member(:content_md5, Shapes::ShapeRef.new(shape: ContentMD5, location: "header", location_name: "Content-MD5"))
1721
1734
  PutBucketReplicationRequest.add_member(:replication_configuration, Shapes::ShapeRef.new(shape: ReplicationConfiguration, required: true, location_name: "ReplicationConfiguration", metadata: {"xmlNamespace"=>{"uri"=>"http://s3.amazonaws.com/doc/2006-03-01/"}}))
1735
+ PutBucketReplicationRequest.add_member(:token, Shapes::ShapeRef.new(shape: ObjectLockToken, location: "header", location_name: "x-amz-bucket-object-lock-token"))
1722
1736
  PutBucketReplicationRequest.struct_class = Types::PutBucketReplicationRequest
1723
1737
  PutBucketReplicationRequest[:payload] = :replication_configuration
1724
1738
  PutBucketReplicationRequest[:payload_member] = PutBucketReplicationRequest.member(:replication_configuration)
@@ -1803,6 +1817,7 @@ module Aws::S3
1803
1817
  PutObjectOutput.add_member(:sse_customer_algorithm, Shapes::ShapeRef.new(shape: SSECustomerAlgorithm, location: "header", location_name: "x-amz-server-side-encryption-customer-algorithm"))
1804
1818
  PutObjectOutput.add_member(:sse_customer_key_md5, Shapes::ShapeRef.new(shape: SSECustomerKeyMD5, location: "header", location_name: "x-amz-server-side-encryption-customer-key-MD5"))
1805
1819
  PutObjectOutput.add_member(:ssekms_key_id, Shapes::ShapeRef.new(shape: SSEKMSKeyId, location: "header", location_name: "x-amz-server-side-encryption-aws-kms-key-id"))
1820
+ PutObjectOutput.add_member(:ssekms_encryption_context, Shapes::ShapeRef.new(shape: SSEKMSEncryptionContext, location: "header", location_name: "x-amz-server-side-encryption-context"))
1806
1821
  PutObjectOutput.add_member(:request_charged, Shapes::ShapeRef.new(shape: RequestCharged, location: "header", location_name: "x-amz-request-charged"))
1807
1822
  PutObjectOutput.struct_class = Types::PutObjectOutput
1808
1823
 
@@ -1830,6 +1845,7 @@ module Aws::S3
1830
1845
  PutObjectRequest.add_member(:sse_customer_key, Shapes::ShapeRef.new(shape: SSECustomerKey, location: "header", location_name: "x-amz-server-side-encryption-customer-key"))
1831
1846
  PutObjectRequest.add_member(:sse_customer_key_md5, Shapes::ShapeRef.new(shape: SSECustomerKeyMD5, location: "header", location_name: "x-amz-server-side-encryption-customer-key-MD5"))
1832
1847
  PutObjectRequest.add_member(:ssekms_key_id, Shapes::ShapeRef.new(shape: SSEKMSKeyId, location: "header", location_name: "x-amz-server-side-encryption-aws-kms-key-id"))
1848
+ PutObjectRequest.add_member(:ssekms_encryption_context, Shapes::ShapeRef.new(shape: SSEKMSEncryptionContext, location: "header", location_name: "x-amz-server-side-encryption-context"))
1833
1849
  PutObjectRequest.add_member(:request_payer, Shapes::ShapeRef.new(shape: RequestPayer, location: "header", location_name: "x-amz-request-payer"))
1834
1850
  PutObjectRequest.add_member(:tagging, Shapes::ShapeRef.new(shape: TaggingHeader, location: "header", location_name: "x-amz-tagging"))
1835
1851
  PutObjectRequest.add_member(:object_lock_mode, Shapes::ShapeRef.new(shape: ObjectLockMode, location: "header", location_name: "x-amz-object-lock-mode"))
@@ -1910,6 +1926,7 @@ module Aws::S3
1910
1926
  ReplicationRule.add_member(:filter, Shapes::ShapeRef.new(shape: ReplicationRuleFilter, location_name: "Filter"))
1911
1927
  ReplicationRule.add_member(:status, Shapes::ShapeRef.new(shape: ReplicationRuleStatus, required: true, location_name: "Status"))
1912
1928
  ReplicationRule.add_member(:source_selection_criteria, Shapes::ShapeRef.new(shape: SourceSelectionCriteria, location_name: "SourceSelectionCriteria"))
1929
+ ReplicationRule.add_member(:existing_object_replication, Shapes::ShapeRef.new(shape: ExistingObjectReplication, location_name: "ExistingObjectReplication"))
1913
1930
  ReplicationRule.add_member(:destination, Shapes::ShapeRef.new(shape: Destination, required: true, location_name: "Destination"))
1914
1931
  ReplicationRule.add_member(:delete_marker_replication, Shapes::ShapeRef.new(shape: DeleteMarkerReplication, location_name: "DeleteMarkerReplication"))
1915
1932
  ReplicationRule.struct_class = Types::ReplicationRule
@@ -1989,6 +2006,10 @@ module Aws::S3
1989
2006
 
1990
2007
  SSES3.struct_class = Types::SSES3
1991
2008
 
2009
+ ScanRange.add_member(:start, Shapes::ShapeRef.new(shape: Start, location_name: "Start"))
2010
+ ScanRange.add_member(:end, Shapes::ShapeRef.new(shape: End, location_name: "End"))
2011
+ ScanRange.struct_class = Types::ScanRange
2012
+
1992
2013
  SelectObjectContentEventStream.add_member(:records, Shapes::ShapeRef.new(shape: RecordsEvent, event: true, location_name: "Records"))
1993
2014
  SelectObjectContentEventStream.add_member(:stats, Shapes::ShapeRef.new(shape: StatsEvent, event: true, location_name: "Stats"))
1994
2015
  SelectObjectContentEventStream.add_member(:progress, Shapes::ShapeRef.new(shape: ProgressEvent, event: true, location_name: "Progress"))
@@ -2011,6 +2032,7 @@ module Aws::S3
2011
2032
  SelectObjectContentRequest.add_member(:request_progress, Shapes::ShapeRef.new(shape: RequestProgress, location_name: "RequestProgress"))
2012
2033
  SelectObjectContentRequest.add_member(:input_serialization, Shapes::ShapeRef.new(shape: InputSerialization, required: true, location_name: "InputSerialization"))
2013
2034
  SelectObjectContentRequest.add_member(:output_serialization, Shapes::ShapeRef.new(shape: OutputSerialization, required: true, location_name: "OutputSerialization"))
2035
+ SelectObjectContentRequest.add_member(:scan_range, Shapes::ShapeRef.new(shape: ScanRange, location_name: "ScanRange"))
2014
2036
  SelectObjectContentRequest.struct_class = Types::SelectObjectContentRequest
2015
2037
 
2016
2038
  SelectParameters.add_member(:input_serialization, Shapes::ShapeRef.new(shape: InputSerialization, required: true, location_name: "InputSerialization"))
@@ -114,6 +114,10 @@ module Aws
114
114
  url.path += '/' unless url.path[-1] == '/'
115
115
  url.path += Seahorse::Util.uri_escape(name)
116
116
  end
117
+ if (client.config.region == 'us-east-1') &&
118
+ (client.config.s3_us_east_1_regional_endpoint == 'legacy')
119
+ url.host = Plugins::IADRegionalEndpoint.legacy_host(url.host)
120
+ end
117
121
  url.to_s
118
122
  end
119
123
 
@@ -1,14 +1,14 @@
1
1
  module Aws
2
2
  module S3
3
3
  class Object
4
-
5
4
  alias size content_length
6
5
 
7
6
  # Copies another object to this object. Use `multipart_copy: true`
8
7
  # for large objects. This is required for objects that exceed 5GB.
9
8
  #
10
- # @param [S3::Object, S3::ObjectVersion, S3::ObjectSummary, String, Hash] source
11
- # Where to copy object data from. `source` must be one of the following:
9
+ # @param [S3::Object, S3::ObjectVersion, S3::ObjectSummary, String, Hash]
10
+ # source Where to copy object data from. `source` must be one of the
11
+ # following:
12
12
  #
13
13
  # * {Aws::S3::Object}
14
14
  # * {Aws::S3::ObjectSummary}
@@ -103,8 +103,9 @@ module Aws
103
103
  ObjectCopier.new(self, options).copy_to(target, options)
104
104
  end
105
105
 
106
- # Copies and deletes the current object. The object will only be
107
- # deleted if the copy operation succeeds.
106
+ # Copies and deletes the current object. The object will only be deleted
107
+ # if the copy operation succeeds.
108
+ #
108
109
  # @param (see Object#copy_to)
109
110
  # @option (see Object#copy_to)
110
111
  # @return [void]
@@ -129,10 +130,7 @@ module Aws
129
130
  client.config.credentials,
130
131
  client.config.region,
131
132
  bucket_name,
132
- {
133
- key: key,
134
- url: bucket.url,
135
- }.merge(options)
133
+ { key: key, url: bucket.url }.merge(options)
136
134
  )
137
135
  end
138
136
 
@@ -186,10 +184,10 @@ module Aws
186
184
  #
187
185
  def presigned_url(http_method, params = {})
188
186
  presigner = Presigner.new(client: client)
189
- presigner.presigned_url("#{http_method.downcase}_object", params.merge(
190
- bucket: bucket_name,
191
- key: key,
192
- ))
187
+ presigner.presigned_url(
188
+ "#{http_method.downcase}_object",
189
+ params.merge(bucket: bucket_name, key: key)
190
+ )
193
191
  end
194
192
 
195
193
  # Returns the public (un-signed) URL for this object.
@@ -199,7 +197,8 @@ module Aws
199
197
  #
200
198
  # To use virtual hosted bucket url (disables https):
201
199
  #
202
- # s3.bucket('my.bucket.com').object('key').public_url(virtual_host: true)
200
+ # s3.bucket('my.bucket.com').object('key')
201
+ # .public_url(virtual_host: true)
203
202
  # #=> "http://my.bucket.com/key"
204
203
  #
205
204
  # @option options [Boolean] :virtual_host (false) When `true`, the bucket
@@ -216,11 +215,12 @@ module Aws
216
215
 
217
216
  # Uploads a stream in a streaming fashion to the current object in S3.
218
217
  #
219
- # # Passed chunks automatically split into multipart upload parts
220
- # # and the parts are uploaded in parallel. This allows for streaming uploads
221
- # # that never touch the disk.
218
+ # Passed chunks automatically split into multipart upload parts and the
219
+ # parts are uploaded in parallel. This allows for streaming uploads that
220
+ # never touch the disk.
222
221
  #
223
- # Note that this is known to have issues in JRuby until jruby-9.1.15.0, so avoid using this with older versions of JRuby.
222
+ # Note that this is known to have issues in JRuby until jruby-9.1.15.0,
223
+ # so avoid using this with older versions of JRuby.
224
224
  #
225
225
  # @example Streaming chunks of data
226
226
  # obj.upload_stream do |write_stream|
@@ -235,17 +235,15 @@ module Aws
235
235
  # IO.copy_stream(STDIN, write_stream)
236
236
  # end
237
237
  #
238
- # @option options [Integer] :thread_count
239
- # The number of parallel multipart uploads
240
- # Default `:thread_count` is `10`.
238
+ # @option options [Integer] :thread_count (10) The number of parallel
239
+ # multipart uploads
241
240
  #
242
- # @option options [Boolean] :tempfile
243
- # Normally read data is stored in memory when building the parts in order to complete
244
- # the underlying multipart upload. By passing `:tempfile => true` data read will be
241
+ # @option options [Boolean] :tempfile (false) Normally read data is stored
242
+ # in memory when building the parts in order to complete the underlying
243
+ # multipart upload. By passing `:tempfile => true` data read will be
245
244
  # temporarily stored on disk reducing the memory footprint vastly.
246
- # Default `:tempfile` is `false`.
247
245
  #
248
- # @option options [Integer] :part_size
246
+ # @option options [Integer] :part_size (5242880)
249
247
  # Define how big each part size but the last should be.
250
248
  # Default `:part_size` is `5 * 1024 * 1024`.
251
249
  #
@@ -264,9 +262,12 @@ module Aws
264
262
  client: client,
265
263
  thread_count: uploading_options.delete(:thread_count),
266
264
  tempfile: uploading_options.delete(:tempfile),
267
- part_size: uploading_options.delete(:part_size),
265
+ part_size: uploading_options.delete(:part_size)
266
+ )
267
+ uploader.upload(
268
+ uploading_options.merge(bucket: bucket_name, key: key),
269
+ &block
268
270
  )
269
- uploader.upload(uploading_options.merge(bucket: bucket_name, key: key), &block)
270
271
  true
271
272
  end
272
273
 
@@ -282,15 +283,29 @@ module Aws
282
283
  # # and the parts are uploaded in parallel
283
284
  # obj.upload_file('/path/to/very_large_file')
284
285
  #
285
- # @param [String,Pathname,File,Tempfile] source A file or path to a file
286
- # on the local file system that should be uploaded to this object.
287
- # If you pass an open file object, then it is your responsibility
288
- # to close the file object once the upload completes.
286
+ # The response of the S3 upload API is yielded if a block given.
287
+ #
288
+ # # API response will have etag value of the file
289
+ # obj.upload_file('/path/to/file') do |response|
290
+ # etag = response.etag
291
+ # end
292
+ #
293
+ # @param [String, Pathname, File, Tempfile] source A file on the local
294
+ # file system that will be uploaded as this object. This can either be
295
+ # a String or Pathname to the file, an open File object, or an open
296
+ # Tempfile object. If you pass an open File or Tempfile object, then
297
+ # you are responsible for closing it after the upload completes. When
298
+ # using an open Tempfile, rewind it before uploading or else the object
299
+ # will be empty.
289
300
  #
290
301
  # @option options [Integer] :multipart_threshold (15728640) Files larger
291
302
  # than `:multipart_threshold` are uploaded using the S3 multipart APIs.
292
303
  # Default threshold is 15MB.
293
304
  #
305
+ # @option options [Integer] :thread_count (10) The number of parallel
306
+ # multipart uploads. This option is not used if the file is smaller than
307
+ # `:multipart_threshold`.
308
+ #
294
309
  # @raise [MultipartUploadError] If an object is being uploaded in
295
310
  # parts, and the upload can not be completed, then the upload is
296
311
  # aborted and this error is raised. The raised error has a `#errors`
@@ -304,8 +319,13 @@ module Aws
304
319
  uploading_options = options.dup
305
320
  uploader = FileUploader.new(
306
321
  multipart_threshold: uploading_options.delete(:multipart_threshold),
307
- client: client)
308
- uploader.upload(source, uploading_options.merge(bucket: bucket_name, key: key))
322
+ client: client
323
+ )
324
+ response = uploader.upload(
325
+ source,
326
+ uploading_options.merge(bucket: bucket_name, key: key)
327
+ )
328
+ yield response if block_given?
309
329
  true
310
330
  end
311
331
 
@@ -320,7 +340,7 @@ module Aws
320
340
  # # and the parts are downloaded in parallel
321
341
  # obj.download_file('/path/to/very_large_file')
322
342
  #
323
- # @param [String] destination Where to download the file to
343
+ # @param [String] destination Where to download the file to.
324
344
  #
325
345
  # @option options [String] mode `auto`, `single_request`, `get_range`
326
346
  # `single_request` mode forces only 1 GET request is made in download,
@@ -328,21 +348,23 @@ module Aws
328
348
  # customizing each range size in multipart_download,
329
349
  # By default, `auto` mode is enabled, which performs multipart_download
330
350
  #
331
- # @option options [String] chunk_size required in get_range mode
351
+ # @option options [String] chunk_size required in get_range mode.
332
352
  #
333
- # @option options [String] thread_count Customize threads used in multipart
334
- # download, if not provided, 10 is default value
353
+ # @option options [Integer] thread_count (10) Customize threads used in
354
+ # the multipart download.
335
355
  #
336
- # @option options [String] version_id The object version id used to retrieve
337
- # the object, to know more about object versioning, see:
356
+ # @option options [String] version_id The object version id used to
357
+ # retrieve the object. For more about object versioning, see:
338
358
  # https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectVersioning.html
339
359
  #
340
- # @return [Boolean] Returns `true` when the file is downloaded
341
- # without any errors.
360
+ # @return [Boolean] Returns `true` when the file is downloaded without
361
+ # any errors.
342
362
  def download_file(destination, options = {})
343
363
  downloader = FileDownloader.new(client: client)
344
364
  downloader.download(
345
- destination, options.merge(bucket: bucket_name, key: key))
365
+ destination,
366
+ options.merge(bucket: bucket_name, key: key)
367
+ )
346
368
  true
347
369
  end
348
370
  end
@@ -1,3 +1,5 @@
1
+ require 'forwardable'
2
+
1
3
  module Aws
2
4
  module S3
3
5
 
@@ -178,6 +180,8 @@ module Aws
178
180
  class Client
179
181
 
180
182
  extend Deprecations
183
+ extend Forwardable
184
+ def_delegators :@client, :delete_object, :head_object
181
185
 
182
186
  # Creates a new encryption client. You must provide one of the following
183
187
  # options:
@@ -14,31 +14,31 @@ module Aws::S3
14
14
  end
15
15
 
16
16
  def on_records_event(&block)
17
- @event_emitter.on(:records, Proc.new)
17
+ @event_emitter.on(:records, block) if block_given?
18
18
  end
19
19
 
20
20
  def on_stats_event(&block)
21
- @event_emitter.on(:stats, Proc.new)
21
+ @event_emitter.on(:stats, block) if block_given?
22
22
  end
23
23
 
24
24
  def on_progress_event(&block)
25
- @event_emitter.on(:progress, Proc.new)
25
+ @event_emitter.on(:progress, block) if block_given?
26
26
  end
27
27
 
28
28
  def on_cont_event(&block)
29
- @event_emitter.on(:cont, Proc.new)
29
+ @event_emitter.on(:cont, block) if block_given?
30
30
  end
31
31
 
32
32
  def on_end_event(&block)
33
- @event_emitter.on(:end, Proc.new)
33
+ @event_emitter.on(:end, block) if block_given?
34
34
  end
35
35
 
36
36
  def on_error_event(&block)
37
- @event_emitter.on(:error, Proc.new)
37
+ @event_emitter.on(:error, block) if block_given?
38
38
  end
39
39
 
40
40
  def on_initial_response_event(&block)
41
- @event_emitter.on(:initial_response, Proc.new)
41
+ @event_emitter.on(:initial_response, block) if block_given?
42
42
  end
43
43
 
44
44
  def on_event(&block)
@@ -1,15 +1,18 @@
1
1
  module Aws
2
2
  module S3
3
3
 
4
- # A utility class that provides an IO-like interface to a portion of
5
- # a file on disk.
4
+ # A utility class that provides an IO-like interface to a portion of a file
5
+ # on disk.
6
6
  # @api private
7
7
  class FilePart
8
8
 
9
- # @option options [required,String,Pathname,File,Tempfile] :source
10
- # @option options [required,Integer] :offset The file part will read
9
+ # @option options [required, String, Pathname, File, Tempfile] :source
10
+ # The file to upload.
11
+ #
12
+ # @option options [required, Integer] :offset The file part will read
11
13
  # starting at this byte offset.
12
- # @option options [required,Integer] :size The maximum number of bytes to
14
+ #
15
+ # @option options [required, Integer] :size The maximum number of bytes to
13
16
  # read from the `:offset`.
14
17
  def initialize(options = {})
15
18
  @source = options[:source]
@@ -19,7 +22,7 @@ module Aws
19
22
  @file = nil
20
23
  end
21
24
 
22
- # @return [String,Pathname,File,Tempfile]
25
+ # @return [String, Pathname, File, Tempfile]
23
26
  attr_reader :source
24
27
 
25
28
  # @return [Integer]
@@ -7,13 +7,14 @@ module Aws
7
7
 
8
8
  FIFTEEN_MEGABYTES = 15 * 1024 * 1024
9
9
 
10
+ # @param [Hash] options
10
11
  # @option options [Client] :client
11
- # @option options [Integer] :multipart_threshold Files greater than
12
- # `:multipart_threshold` bytes are uploaded using S3 multipart APIs.
12
+ # @option options [Integer] :multipart_threshold (15728640)
13
13
  def initialize(options = {})
14
14
  @options = options
15
15
  @client = options[:client] || Client.new
16
- @multipart_threshold = options[:multipart_threshold] || FIFTEEN_MEGABYTES
16
+ @multipart_threshold = options[:multipart_threshold] ||
17
+ FIFTEEN_MEGABYTES
17
18
  end
18
19
 
19
20
  # @return [Client]
@@ -23,9 +24,9 @@ module Aws
23
24
  # using a {MultipartFileUploader}.
24
25
  attr_reader :multipart_threshold
25
26
 
26
- # @param [String,Pathname,File,Tempfile] source
27
- # @option options [required,String] :bucket
28
- # @option options [required,String] :key
27
+ # @param [String, Pathname, File, Tempfile] source The file to upload.
28
+ # @option options [required, String] :bucket The bucket to upload to.
29
+ # @option options [required, String] :key The key for the object.
29
30
  # @return [void]
30
31
  def upload(source, options = {})
31
32
  if File.size(source) >= multipart_threshold
@@ -37,12 +38,6 @@ module Aws
37
38
 
38
39
  private
39
40
 
40
- def put_object(source, options)
41
- open_file(source) do |file|
42
- @client.put_object(options.merge(body: file))
43
- end
44
- end
45
-
46
41
  def open_file(source)
47
42
  if String === source || Pathname === source
48
43
  File.open(source, 'rb') { |file| yield(file) }
@@ -51,6 +46,12 @@ module Aws
51
46
  end
52
47
  end
53
48
 
49
+ def put_object(source, options)
50
+ open_file(source) do |file|
51
+ @client.put_object(options.merge(body: file))
52
+ end
53
+ end
54
+
54
55
  end
55
56
  end
56
57
  end
@@ -1,5 +1,4 @@
1
1
  require 'pathname'
2
- require 'thread'
3
2
  require 'set'
4
3
 
5
4
  module Aws
@@ -16,14 +15,17 @@ module Aws
16
15
  THREAD_COUNT = 10
17
16
 
18
17
  # @api private
19
- CREATE_OPTIONS =
20
- Set.new(Client.api.operation(:create_multipart_upload).input.shape.member_names)
18
+ CREATE_OPTIONS = Set.new(
19
+ Client.api.operation(:create_multipart_upload).input.shape.member_names
20
+ )
21
21
 
22
22
  # @api private
23
- UPLOAD_PART_OPTIONS =
24
- Set.new(Client.api.operation(:upload_part).input.shape.member_names)
23
+ UPLOAD_PART_OPTIONS = Set.new(
24
+ Client.api.operation(:upload_part).input.shape.member_names
25
+ )
25
26
 
26
27
  # @option options [Client] :client
28
+ # @option options [Integer] :thread_count (THREAD_COUNT)
27
29
  def initialize(options = {})
28
30
  @client = options[:client] || Client.new
29
31
  @thread_count = options[:thread_count] || THREAD_COUNT
@@ -32,9 +34,9 @@ module Aws
32
34
  # @return [Client]
33
35
  attr_reader :client
34
36
 
35
- # @param [String,Pathname,File,Tempfile] source
36
- # @option options [required,String] :bucket
37
- # @option options [required,String] :key
37
+ # @param [String, Pathname, File, Tempfile] source The file to upload.
38
+ # @option options [required, String] :bucket The bucket to upload to.
39
+ # @option options [required, String] :key The key for the object.
38
40
  # @return [void]
39
41
  def upload(source, options = {})
40
42
  if File.size(source) < MIN_PART_SIZE
@@ -57,7 +59,8 @@ module Aws
57
59
  bucket: options[:bucket],
58
60
  key: options[:key],
59
61
  upload_id: upload_id,
60
- multipart_upload: { parts: parts })
62
+ multipart_upload: { parts: parts }
63
+ )
61
64
  end
62
65
 
63
66
  def upload_parts(upload_id, source, options)
@@ -93,7 +96,7 @@ module Aws
93
96
  part_number = 1
94
97
  parts = []
95
98
  while offset < size
96
- parts << upload_part_opts(options).merge({
99
+ parts << upload_part_opts(options).merge(
97
100
  upload_id: upload_id,
98
101
  part_number: part_number,
99
102
  body: FilePart.new(
@@ -101,7 +104,7 @@ module Aws
101
104
  offset: offset,
102
105
  size: part_size(size, default_part_size, offset)
103
106
  )
104
- })
107
+ )
105
108
  part_number += 1
106
109
  offset += default_part_size
107
110
  end
@@ -70,7 +70,8 @@ module Aws::S3
70
70
  data[:storage_class]
71
71
  end
72
72
 
73
-
73
+ # Specifies the owner of the object that is part of the multipart
74
+ # upload.
74
75
  # @return [Types::Owner]
75
76
  def owner
76
77
  data[:owner]
@@ -247,6 +248,7 @@ module Aws::S3
247
248
  # })
248
249
  # @param [Hash] options ({})
249
250
  # @option options [Types::CompletedMultipartUpload] :multipart_upload
251
+ # The container for the multipart upload request information.
250
252
  # @option options [String] :request_payer
251
253
  # Confirms that the requester knows that she or he will be charged for
252
254
  # the request. Bucket owners need not specify this parameter in their
@@ -298,7 +298,9 @@ module Aws::S3
298
298
  # Size of the body in bytes. This parameter is useful when the size of
299
299
  # the body cannot be determined automatically.
300
300
  # @option options [String] :content_md5
301
- # The base64-encoded 128-bit MD5 digest of the part data.
301
+ # The base64-encoded 128-bit MD5 digest of the part data. This parameter
302
+ # is auto-populated when using the command from the CLI. This parameted
303
+ # is required if object lock parameters are specified.
302
304
  # @option options [String] :sse_customer_algorithm
303
305
  # Specifies the algorithm to use to when encrypting the object (e.g.,
304
306
  # AES256).