在轨文件下载链接(file download link in rails)

2019-06-18 18:28发布

我想给访问者下载一​​些PDF格式的选项。 我试过了:

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

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

有些变化,但他们似乎没有工作。 我不断收到No route matches [GET] "/data/abc.pdf"

我有一个名为数据文件夹,位于资产文件夹中的PDF文件。 任何帮助,将不胜感激。

Answer 1:

轨道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 %>

轨道3

该办法做到这一点:

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

你应该去这种替代

轨道<3

文件公用文件夹

这可能会在回答你: 如何下载Rails应用程序文件

你应该把你的文件公用文件夹中,那就是把戏。

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

让我知道,如果你无法将您的文件移动到公用文件夹。

通过控制器下载

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

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


Answer 2:

轨道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 %>


Answer 3:

如果文件是静态的(这意味着他们不会改变),将它们放置在公共文件夹中。

然后你就可以像下载

<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



Answer 4:

您也可以叫你这样的控制器操作

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

在您的控制器

def download_file
 redirect_to paperclip_attachment.file.url
end


Answer 5:

我挣扎了很多找到简单的方法来自动立即下载某些文件从公共电话簿。 最后我想出了这个解决方案。 例如:我有公共电话簿里面我在SVG文件夹文件。

Public/svg/Test1.xlsx

现在,当我试图访问它加载它,并给路径与曲别针把它给问题。 甚至当我尝试完整路径给它的问题,以及因此我们可以把它的动态路径。 首先获得主机的路径,以便可以轻松地重定向。 <%URL = request.original_url.chomp(request.fullpath)%>

现在,我们可以在公共文件夹的访问任何文件,如下图所示,并通过ID和下载选项。 下载选项重新命名其ü要下载任何文件。

<%= link_to 'Database File', "#{url}/svgs/Test1.xlsx", download: 'Data.xlsx',id: "Link_to_Downlaod" %>

现在,点击链接就能准备就绪,我们可以点击上面的链接下载该文件。 使用下面的脚本来自动下载文件。

  <script type="text/javascript">
    window.onload = document.getElementById('Link_to_Downlaod').click();
  </script>
</div>

对于PDF的案例或任何其他文件类型只需要改变文件扩展名。



文章来源: file download link in rails