rails中的文件下载链接

Ion*_*lub 61 ruby-on-rails download hyperlink link-to ruby-on-rails-3

我想让访问者可以选择下载一些pdf.我试过了:

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

<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
Run Code Online (Sandbox Code Playgroud)

和一些变化但它们似乎不起作用.我一直在No route matches [GET] "/data/abc.pdf"

我将pdf文件放在名为data的文件夹中,该文件夹位于assets文件夹中.任何帮助,将不胜感激.

rus*_*ils 75

导轨4:

在路线:

get "home/download_pdf"
Run Code Online (Sandbox Code Playgroud)

在控制器中(已经有pdf):

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

在控制器中(需要生成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
Run Code Online (Sandbox Code Playgroud)

在视图中:

<%= link_to 'Download PDF', home_download_pdf_url %>
Run Code Online (Sandbox Code Playgroud)

  • 只需使用<%= link_to"Download Pdf","files/pdf.pdf",:class =>"themed_text"%> (2认同)

fel*_*pes 72

导轨4:

在路线:

get "home/download_pdf"
Run Code Online (Sandbox Code Playgroud)

在控制器中(已经有pdf):

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

在控制器中(需要生成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
Run Code Online (Sandbox Code Playgroud)

在视图中:

<%= link_to 'Download PDF', home_download_pdf_url %>
Run Code Online (Sandbox Code Playgroud)

Rails 3

做到这一点的方法:

def download
  send_data pdf,
    :filename => "abc.pdf",
    :type => "application/pdf"
end
Run Code Online (Sandbox Code Playgroud)

你应该去做这个选择

Rails <3

公共文件夹中的文件

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

您应该将文件放在公共文件夹中,这就是诀窍.

正确放置文件时应该工作.

如果您无法将文件移动到公用文件夹,请告诉我.

通过控制器下载

用立即下载行动创建一个控制器和link_to

  def download
    send_file '/assets/data/abc.pdf', :type=>"application/pdf", :x_sendfile=>true
  end
Run Code Online (Sandbox Code Playgroud)


Cru*_*nez 19

如果文件是静态的(意味着它们没有更改),请将它们放在公用文件夹中.

然后你可以下载喜欢

<a href="file.pdf" download>PDF</a>
Run Code Online (Sandbox Code Playgroud)

或与ERB

<%= link_to 'PDF', 'file.pdf', download: '' %>
Run Code Online (Sandbox Code Playgroud)

并为该文件提供另一个名称以供下载,只需将该名称传递给下载选项即可

<%= link_to 'PDF', 'file.pdf', download: 'data' %>
Run Code Online (Sandbox Code Playgroud)

这将data.pdf代替下载文件file.pdf.