diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2015-03-28 23:14:33 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2015-03-28 23:14:33 -0700 |
commit | 1370d21460255914e03754fb0f20052e6b3002d7 (patch) | |
tree | 7d8275a293e71286df430bef3e55d6b0ebdf9a4c /app/controllers/downloads_controller.rb | |
parent | 43743c4b42b01eb95bec6ab5e4991121b06c9c36 (diff) |
Crude first pass at downloading files.
Diffstat (limited to 'app/controllers/downloads_controller.rb')
-rw-r--r-- | app/controllers/downloads_controller.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/app/controllers/downloads_controller.rb b/app/controllers/downloads_controller.rb index 300d0b1..2681b0a 100644 --- a/app/controllers/downloads_controller.rb +++ b/app/controllers/downloads_controller.rb @@ -1,3 +1,6 @@ +require 'aws-sdk-core/s3' +require 'fileutils' + class DownloadsController < ApplicationController before_action :set_download, only: [:show, :edit, :update, :destroy] @@ -7,6 +10,25 @@ class DownloadsController < ApplicationController @downloads = Download.all end + # GET /downloads/:filename + def download + download = Download.find_by(filename: params[:filename]) or not_found + + s3client = Aws::S3::Client.new() + s3obj = Aws::S3::Object.new(ENV['S3_DOWNLOADS_BUCKET'], download.filename, client: s3client) + resp = s3obj.get + + FileUtils.mkdir_p(Rails.root.join('tmp', 'downloads')) + + cached_filename = Rails.root.join('tmp', 'downloads', download.filename) + + File.open(cached_filename, 'wb') do |file| + file.write resp.body.read + end + + send_file cached_filename + end + # GET /downloads/1 # GET /downloads/1.json def show |