diff options
| author | mo khan <mo@mokhan.ca> | 2014-09-20 21:59:42 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2014-09-20 21:59:42 -0600 |
| commit | 0e26bca0a79756e1a3067fe388faa697d410b8cf (patch) | |
| tree | 501b4598c358b00942af71231d47b652b3a7b6df | |
| parent | 62a26c3e506012f003dc47f4e125e1e730b8d02b (diff) | |
update blob storage to be able to download files from s3.
| -rw-r--r-- | Gemfile | 2 | ||||
| -rw-r--r-- | Gemfile.lock | 6 | ||||
| -rw-r--r-- | app/services/application/handlers/process_avatar.rb | 2 | ||||
| -rw-r--r-- | app/services/infrastructure/blob_storage.rb | 10 | ||||
| -rw-r--r-- | spec/services/infrastructure/blob_storage_spec.rb | 17 |
5 files changed, 31 insertions, 6 deletions
@@ -35,7 +35,7 @@ gem 'gibbon', '~> 1.1.2' gem 'twitter', '~> 5.9.0' gem 'spank' gem 'exifr', '~> 1.1.3' -gem 'aws-sdk', '~> 1.42.0' +gem 'aws-sdk' gem 'mime-types', '~> 1.25.1' gem 'ejs', '~> 1.1.1' gem 'js-routes', '~> 0.9.8' diff --git a/Gemfile.lock b/Gemfile.lock index a5a077e8..78d6a2c6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -34,7 +34,9 @@ GEM asset_sync (1.0.0) activemodel fog (>= 1.8.0) - aws-sdk (1.42.0) + aws-sdk (1.53.0) + aws-sdk-v1 (= 1.53.0) + aws-sdk-v1 (1.53.0) json (~> 1.4) nokogiri (>= 1.4.4) bcrypt (3.1.7) @@ -342,7 +344,7 @@ PLATFORMS DEPENDENCIES acts-as-taggable-on (~> 3.3.0) asset_sync (~> 1.0.0) - aws-sdk (~> 1.42.0) + aws-sdk bcrypt-ruby better_errors binding_of_caller diff --git a/app/services/application/handlers/process_avatar.rb b/app/services/application/handlers/process_avatar.rb index 54fd2b26..67e56d75 100644 --- a/app/services/application/handlers/process_avatar.rb +++ b/app/services/application/handlers/process_avatar.rb @@ -9,7 +9,7 @@ class ProcessAvatar def handle(message) user = User.find(message[:user_id]) - user.avatar = Photo.create!(image_processing: true) + user.avatar = Photo.create! user.avatar.upload(message[:file_path], @blob_storage) user.avatar.save! end diff --git a/app/services/infrastructure/blob_storage.rb b/app/services/infrastructure/blob_storage.rb index 4a6743c2..9fbcc749 100644 --- a/app/services/infrastructure/blob_storage.rb +++ b/app/services/infrastructure/blob_storage.rb @@ -12,6 +12,16 @@ class BlobStorage object.acl = :public_read end + def download(key) + object = connection.buckets[bucket_name].objects[key] + File.open("#{Dir.tmpdir}/#{key}", "wb") do |tempfile| + object.read do |chunk| + tempfile.write(chunk) + end + yield tempfile + end + end + private def connection diff --git a/spec/services/infrastructure/blob_storage_spec.rb b/spec/services/infrastructure/blob_storage_spec.rb index c1de77a6..8bd5cdf5 100644 --- a/spec/services/infrastructure/blob_storage_spec.rb +++ b/spec/services/infrastructure/blob_storage_spec.rb @@ -4,9 +4,9 @@ describe BlobStorage do let(:bucket) { ENV['FOG_DIRECTORY'] } subject { BlobStorage.new } - context "when uploading" do - let(:file) { File.join(Rails.root, 'spec/fixtures/images/gps.jpg') } + let(:file) { File.join(Rails.root, 'spec/fixtures/images/gorilla.jpg') } + context "when uploading" do it "uploads to s3" do key = "test#{SecureRandom.uuid}" subject.upload(key, file) @@ -15,4 +15,17 @@ describe BlobStorage do expect(object.exists?).to be_truthy end end + + describe "#download" do + let(:key) { "test#{SecureRandom.uuid}" } + + it 'downloads a file from blob storage' do + subject.upload(key, file) + + sha = subject.download(key) do |temp_file| + Digest::SHA256.file(temp_file.path).hexdigest + end + expect(sha).to eql(Digest::SHA256.file(file).hexdigest) + end + end end |
