在我的Ruby on Rails 4
应用程序中,我想为用户提供png图像的下载。
首先,需要放置 这个png:
其次,如何我会这样做?
我已经尝试了第二个答案here所说的,我收到了这个错误:
No route matches [GET] "/public/diagram.png"
执行上述答案:
在我的视图:
<%= link_to "DOWNLOAD", "/public/diagram.png" %>
控制器:
class ControllerNamesController < ApplicationController
// other actions defined: index, show, create, new, edit, update, destroy
def download_png
send_file(
"#{Rails.root}/public/diagram.png",
filename: "diagram.png",
type: "application/png"
)
end
路径文件(所有控制器都定义如下):
resources :ControllerName
get "ControllerName/download_png", as: :download
答案 0 :(得分:2)
尝试使用此
<%= link_to "Download" ,:action => :download %>
def download
send_file '/home/blog/downloads/away.png',:type=>"application/png", :x_sendfile=>true
end
答案 1 :(得分:0)
对于这个问题,将图像放在 / public 中会没问题。而对于你得到的错误,这就是问题
您只需将图像文件的path
放在link_to
帮助程序中,而它需要一个路径。
尝试将其更改为
<%= link_to "DOWNLOAD", home_download_png_url %>
修改强>
无法思考为什么它没有奏效。好吧,正如@nithinJ建议您可以使用
<%= link_to "DOWNLOAD", "/diagram.png" %>
正如你所提到的,你希望它下载而不是在新的浏览器中打开,你可以在控制器中执行此操作
send_file '#{Rails.root}/public/diagram.png', type: 'image/png', disposition: 'attachment'
有关详细信息,请参阅 send_file 。
答案 2 :(得分:0)
在route.rb
get "home/download_png" , as: :download
在视图中,更改此
<%= link_to "DOWNLOAD", download_path %>