class S3StreamingMultipartUploader::Uploader
Public Class Methods
new(s3_client, bucket, key, enumerator, min_part_size)
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 18 def initialize(s3_client, bucket, key, enumerator, min_part_size) @s3_client = s3_client @bucket = bucket @key = key @enumerator = enumerator @min_part_size = min_part_size end
Public Instance Methods
stream()
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 26 def stream upload_id = start.upload_id begin parts = stream_parts(upload_id) complete(upload_id, parts) rescue Aws::Errors::ServiceError => e abort(upload_id) end end
Private Instance Methods
abort(upload_id)
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 83 def abort(upload_id) @s3_client.abort_multipart_upload( options.merge( upload_id: upload_id ) ) end
complete(upload_id, request_parts)
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 74 def complete(upload_id, request_parts) @s3_client.complete_multipart_upload( options.merge( upload_id: upload_id, multipart_upload: {parts: request_parts} ) ) end
options()
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 48 def options {bucket: @bucket, key: @key} end
read()
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 38 def read buffer = "" begin while (chunck = @enumerator.next) && buffer << chunck && buffer.size <= @min_part_size end rescue StopIteration end buffer end
start()
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 52 def start @s3_client.create_multipart_upload(options) end
stream_parts(upload_id)
click to toggle source
# File lib/s3_streaming_multipart_uploader.rb, line 56 def stream_parts(upload_id) i = 1 parts = [] while (chunck = read).size > 0 parts << @s3_client.upload_part( options.merge( body: chunck, upload_id: upload_id, part_number: i ) ) i += 1 end parts.each_with_index.map do |part, i| {etag: part.etag, part_number: i + 1} end end