diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/application_controller.rb | 4 | ||||
| -rw-r--r-- | app/controllers/downloads_controller.rb | 22 | ||||
| -rw-r--r-- | app/views/downloads/index.html.erb | 44 | 
3 files changed, 37 insertions, 33 deletions
| diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d83690e..a994170 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,4 +2,8 @@ class ApplicationController < ActionController::Base    # Prevent CSRF attacks by raising an exception.    # For APIs, you may want to use :null_session instead.    protect_from_forgery with: :exception + +  def not_found +    raise ActionController::RoutingError.new('Not Found') +  end  end 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 diff --git a/app/views/downloads/index.html.erb b/app/views/downloads/index.html.erb index c017aab..0f0afc9 100644 --- a/app/views/downloads/index.html.erb +++ b/app/views/downloads/index.html.erb @@ -1,35 +1,13 @@  <p id="notice"><%= notice %></p> -<h1>Listing Downloads</h1> - -<table> -  <thead> -    <tr> -      <th>Name</th> -      <th>Filename</th> -      <th>Type</th> -      <th>Description</th> -      <th>Hits</th> -      <th colspan="3"></th> -    </tr> -  </thead> - -  <tbody> -    <% @downloads.each do |download| %> -      <tr> -        <td><%= download.name %></td> -        <td><%= download.filename %></td> -        <td><%= download.type %></td> -        <td><%= download.description %></td> -        <td><%= download.hits %></td> -        <td><%= link_to 'Show', download %></td> -        <td><%= link_to 'Edit', edit_download_path(download) %></td> -        <td><%= link_to 'Destroy', download, method: :delete, data: { confirm: 'Are you sure?' } %></td> -      </tr> -    <% end %> -  </tbody> -</table> - -<br> - -<%= link_to 'New Download', new_download_path %> +<% @downloads.each do |download| %> +  <article> +    <h3><%= download.name %></h3> +    <p><%= download.description %></p> +    <p class="filedetails"> +      <span>Type:</span> <%= download.type %> +      <span>Downloads:</span> <%= download.hits %> +    </p> +    <p><%= link_to "Download", download_path(download.filename) %></p> +  </article> +<% end %> | 
