master
1class BlobStorage
2 attr_reader :bucket_name
3
4 def initialize(bucket_name = ENV['FOG_DIRECTORY'])
5 @bucket_name = bucket_name
6 end
7
8 def upload(key, file)
9 Rails.logger.info "uploading to #{bucket_name}/#{key}"
10 object = object_for(key)
11 object.write(Pathname.new(file), options_for(file))
12 object.acl = :public_read
13 end
14
15 def download(key)
16 object = object_for(key)
17 File.open("#{Dir.tmpdir}/#{File.basename(key)}", "wb") do |tempfile|
18 object.read do |chunk|
19 tempfile.write(chunk)
20 end
21 yield tempfile
22 end
23 end
24
25 private
26
27 def object_for(key)
28 connection.buckets[bucket_name].objects[key]
29 end
30
31 def connection
32 @connection ||= AWS::S3.new
33 end
34
35 def content_type_for(file)
36 ::MIME::Types.type_for(file).first.to_s
37 end
38
39 def options_for(file)
40 {
41 content_type: content_type_for(file),
42 cache_control: 'public, max-age=315576000',
43 }
44 end
45
46 class Fake
47 def upload(*args)
48 end
49
50 def downlaod(*args)
51 end
52 end
53end