Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

file download link in rails

I would like to give visitors the option to download some pdf. I have tried:

<%= link_to "abc", "/data/abc.pdf"%>  <%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %> 

and some variations but they don't seem to work. I keep getting No route matches [GET] "/data/abc.pdf"

I have the pdf files in a folder called data, located in the assets folder. Any help would be appreciated.

like image 632
Ionut Hulub Avatar asked Oct 31 '12 18:10

Ionut Hulub


People also ask

How do you download a file in Ruby?

Plain old Ruby The most popular way to download a file without any dependencies is to use the standard library open-uri . open-uri extends Kernel#open so that it can open URIs as if they were files. We can use this to download an image and then save it as a file.


1 Answers

Rails 4:

in routes:

get "home/download_pdf" 

in controller (already have pdf):

def download_pdf   send_file(     "#{Rails.root}/public/your_file.pdf",     filename: "your_custom_file_name.pdf",     type: "application/pdf"   ) end 

in controller (need to generate pdf):

require "prawn" class ClientsController < ApplicationController    def download_pdf     client = Client.find(params[:id])     send_data generate_pdf(client),               filename: "#{client.name}.pdf",               type: "application/pdf"   end    private    def generate_pdf(client)     Prawn::Document.new do       text client.name, align: :center       text "Address: #{client.address}"       text "Email: #{client.email}"     end.render   end end 

in view:

<%= link_to 'Download PDF', home_download_pdf_url %> 

Rails 3

The way to do it:

def download   send_data pdf,     :filename => "abc.pdf",     :type => "application/pdf" end 

You should go to this alternative

Rails < 3

File in public folder

This may the the answer to you: How to download a file from rails application

You should place your file in public folder, that is the trick.

Should work when the file is placed correctly.

Let me know if you can't move your file to public folder.

Download via controller

Create a controller with a downlaod action and link_to it

  def download     send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true   end 
like image 72
felipeclopes Avatar answered Oct 05 '22 17:10

felipeclopes