我希望我的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,而不是实际下载文件。
任何人都可以帮我吗?
由于
答案 0 :(得分:6)
对于HTML5
,它实际上非常简单。您不需要特殊的控制器操作。
<%= link_to "download", '/tool.png', :download => 'filename' %>
# 'filename' specifies the new name for the downloaded file
注意:check the docs查看支持的浏览器
如果您想支持所有浏览器,则必须使用您设置的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直接提供的,但在其他情况下您将看到它们。