我想为访问者提供下载一些PDF文件的选项。 我已经尝试过:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
我尝试了一些变化,但它们似乎都不起作用。我一直收到 No route matches [GET] "/data/abc.pdf"
的错误提示。
我把pdf文件放在一个名为data的文件夹中,该文件夹位于assets文件夹中。任何帮助将不胜感激。
我想为访问者提供下载一些PDF文件的选项。 我已经尝试过:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => 'pdf' %>
我尝试了一些变化,但它们似乎都不起作用。我一直收到 No route matches [GET] "/data/abc.pdf"
的错误提示。
我把pdf文件放在一个名为data的文件夹中,该文件夹位于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
你应该去这个替代方案
Rails < 3
将文件放在public文件夹中
这可能是你的答案:如何从Rails应用程序下载文件
你应该把文件放在public文件夹中,这是诀窍。
如果正确放置文件,则应该可以正常工作。
如果你不能将文件移动到public文件夹中,请告诉我。
通过控制器下载
创建一个控制器,其中包含一个downlaod操作,然后使用link_to
链接它
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
link_to
助手。 - daslicious我为了找到一个简单的方法来自动下载公共目录中的某些文件而苦恼了很久。 最后,我想出了这个解决方案。 例如: 我在公共目录的SVG文件夹中有一个文件。
Public/svg/Test1.xlsx
<%= 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或任何其他文件类型,只需要更改文件扩展名即可。对于我来说,链接到PDF文件的最佳解决方案是通过以下简单步骤:
1- 将您的PDF文件添加到public文件夹中
2- <%= link_to "/nameofthefile.pdf",target: "_blank" do %>pdf file<% end %>
这里有一个视频为您详细展示 https://www.youtube.com/watch?v=bNZ6FJrZ_lo&t=64s`