Class: Sublimate::Uploader

Inherits:
Object
  • Object
show all
Defined in:
lib/sublimate/uploader.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#bucketObject

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_sizeObject



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_nameObject



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