文件下载链接在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