用户单击图像以下载rails中的公共文件

时间:2014-11-01 09:51:16

标签: ruby-on-rails-3

我希望我的rails应用程序的用户能够点击“下载”链接,然后他们将下载我放在公共文件夹中的png文件。 ( 'tool.png')

目前我的错误......

<%= link_to "download", '/tool.png', :action => 'download' %>

我在控制器中创建了一个下载操作:

def download
    send_file '/tool.png', :type=>"application/png", :x_sendfile=>true
end

这里发生的事情是,当用户点击“下载”链接时,它会在自己的窗口中打开tool.png,而不是实际下载文件。

任何人都可以帮我吗?

由于

2 个答案:

答案 0 :(得分:6)

HTML 5

对于HTML5,它实际上非常简单。您不需要特殊的控制器操作。

<%= link_to "download", '/tool.png', :download => 'filename' %>
# 'filename' specifies the new name for the downloaded file

注意:check the docs查看支持的浏览器

&lt; HTML 5

如果您想支持所有浏览器,则必须使用您设置的download action。唯一缺少的是设置正确的route

<强>的routes.rb

get '/download_pdf', "controller_name#download", :as => :download_pdf

然后将您的HTML链接到正确的路径,该路径将调用download action并发送文件。

<%= link_to "download", :download_pdf_path

答案 1 :(得分:1)

您需要的是

<%= link_to "download", '/download', :action => 'download' %>

不是

<%= link_to "download", '/tool.png', :action => 'download' %>

"/download"是需要在路由文件中指定的rails route

因为在您的情况下,您实际上并未点击控制器,所以您只是访问http://host/tool.png。检查开发日志以获取更多信息,您将看到没有日志,因为请求不是由rails直接提供的,但在其他情况下您将看到它们。