13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/s3stream/main.rb', line 13
def store(bucket_name, filename)
require "aws-sdk"
$stdout.sync = true
s3 = AWS::S3.new(S3Stream::CREDENTIALS)
bucket = s3.buckets[bucket_name]
object = bucket.objects[filename]
buffer = ""
total = 0
buffer_size = INITIAL_BUFFER_SIZE
puts "Uploading, please be patient."
object.multipart_upload do |upload|
(1..MAX_CHUNKS).each do |chunk|
if $stdin.eof?
puts "End of input."
break
end
if chunk < MAX_CHUNKS
print "Buffering input (up to #{buffer_size} bytes) ... "
$stdin.read(buffer_size, buffer)
puts "done."
print "Uploading part #{chunk} (#{buffer.size} bytes) ... "
upload.add_part(buffer)
puts "done."
buffer_size = (buffer_size * BUFFER_GROWTH_FACTOR).to_i
else
print "Last part (#{chunk})! Buffering input (unlimited) ..."
buffer = $stdin.read
puts "done."
print "Uploading part #{chunk} (#{buffer.size} bytes) ... "
upload.add_part(buffer)
puts "done."
end
total += buffer.size
end
end
puts "Done uploading to s3://#{bucket_name}/#{filename} (#{total} bytes)"
end
|