文件下载链接在rails

我想给游客下载一些PDF的选项。 我努力了:

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

和一些变化,但他们似乎并没有工作。 我一直得到No route matches [GET] "/data/abc.pdf"

我有一个名为data的文件夹中的pdf文件,位于assets文件夹中。 任何帮助,将不胜感激。

Rails 4:

在路线:

 get "home/download_pdf" 

在控制器(已经有pdf):

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

在控制器(需要生成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 

鉴于:

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

Rails 3

要做到这一点:

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

你应该去这个select

Rails <3

公用文件夹中的文件

这可能是你的答案: 如何从rails应用程序下载文件

你应该把你的文件放在公共文件夹中,这就是诀窍。

当文件正确放置时应该工作。

让我知道如果你不能移动你的文件到公用文件夹。

通过控制器下载

使用downlaod动作和link_to创build一个控制器

  def download send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true end 

Rails 4:

在路线:

 get "home/download_pdf" 

在控制器(已经有pdf):

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

在控制器(需要生成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 

鉴于:

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

如果文件是静态的(意思是它们不改变),将它们放在公用文件夹中。

那么你可以下载像

 <a href="file.pdf" download>PDF</a> 

或与ERB

 <%= link_to 'PDF', 'file.pdf', download: '' %> 

并给该文件另一个名称下载,只需将该名称传递给下载选项

 <%= link_to 'PDF', 'file.pdf', download: 'data' %> 

这将下载文件data.pdf而不是file.pdf

你可以简单地调用你的控制器这样的行动

 <%= link_to "Download", download_file_path, class: "btn btn-sm btn-default", target: "_blank" %> 

并在你的控制器

 def download_file redirect_to paperclip_attachment.file.url end