Class: Sublimate::Uploader
- Inherits:
-
Object
- Object
- Sublimate::Uploader
- Defined in:
- lib/sublimate/uploader.rb
Instance Attribute Summary collapse
-
#bucket ⇒ Object
Returns the value of attribute bucket.
Class Method Summary collapse
Instance Method Summary collapse
- #do_multi_aws(chunked, opts) ⇒ Object
- #do_multi_rackspace(chunked, opts) ⇒ Object
-
#initialize(bucket, opts = {}) ⇒ Uploader
constructor
A new instance of Uploader.
- #multi_method_name ⇒ Object
- #store_file(path, opts = {}) ⇒ Object
Constructor Details
#initialize(bucket, opts = {}) ⇒ Uploader
Returns a new instance of Uploader.
11 12 13 14 |
# File 'lib/sublimate/uploader.rb', line 11 def initialize(bucket, opts = {}) @bucket = bucket @opts = opts end |
Instance Attribute Details
#bucket ⇒ Object
Returns the value of attribute bucket.
16 17 18 |
# File 'lib/sublimate/uploader.rb', line 16 def bucket @bucket end |
Class Method Details
.multipart_min_size ⇒ Object
3 4 5 |
# File 'lib/sublimate/uploader.rb', line 3 def self.multipart_min_size @multipart_min_size ||= (1024 * 1024 * 1024 * 5) #5gb default end |
.multipart_min_size=(v) ⇒ Object
7 8 9 |
# File 'lib/sublimate/uploader.rb', line 7 def self.multipart_min_size=(v) @multipart_min_size = v end |
Instance Method Details
#do_multi_aws(chunked, opts) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/sublimate/uploader.rb', line 36 def do_multi_aws(chunked, opts) multi = bucket.connection.initiate_multipart_upload(bucket.key, opts[:key]) upload_id = multi.body["UploadId"] results = [] chunked.each_chunk do |data, details| part = bucket.connection.upload_part(bucket.key, opts[:key], upload_id, details[:counter] + 1, data) etag = part.headers['ETag'] results << etag end completed_upload = bucket.connection.complete_multipart_upload(bucket.key, opts[:key], upload_id, results) end |
#do_multi_rackspace(chunked, opts) ⇒ Object
49 50 51 52 53 54 55 56 57 |
# File 'lib/sublimate/uploader.rb', line 49 def do_multi_rackspace(chunked, opts) count = 1 chunked.each_chunk do |data, details| key = opts[:key] + "/#{count}" bucket.files.create(:key => key, :body => data) count += 1 end result = bucket.connection.put_object_manifest(bucket.key, opts[:key]) end |
#multi_method_name ⇒ Object
31 32 33 34 |
# File 'lib/sublimate/uploader.rb', line 31 def multi_method_name n = bucket.connection.service.to_s.split('::').last.downcase "do_multi_#{n}" end |
#store_file(path, opts = {}) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/sublimate/uploader.rb', line 17 def store_file(path, opts = {}) opts = {:key => path}.merge(opts) size = File.size(path) m = multi_method_name if size > self.class.multipart_min_size && respond_to?(m) chunked = ChunkedFile.new(path, :chunk_size => @opts[:multipart_chunk_size]) send(m, chunked, opts) else opts[:body] = File.open(path) bucket.files.create(opts) end end |