如何为本地图像创建下载按钮(链接)(png)

时间:2014-05-01 17:28:14

标签: ruby-on-rails ruby

在我的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

3 个答案:

答案 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 %>