Rails’link_to’立即下载图像,而不是在浏览器中打开它

我有一个link_to Rails助手,可以在点击时下载壁纸。 但是图像正在浏览器中加载而不是立即下载。

 

但同时我有一个link_to Rails帮助程序,可以下载.exe格式的屏幕保护程序,但这里的工作方式是:立即下载文件。

  

我应该添加或执行哪些操作,以便图像不会在浏览器中打开,而是立即下载?

谢谢!

通常,最简单的方法是在发送图像时设置适当的标题:

 Content-Disposition: attachment; filename=<file name.ext> 

如果您从文件系统提供文件,send_file方法将允许您适当地设置此标头:

http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_file

如果文件存储在数据库中,则可以使用send_data:

http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_data

使用HTML5下载属性可以更轻松地完成此操作。

 <%= link_to 'Download existing avatar', @user.avatar(:original), download: "User_#{@user.id}_avatar" %> 

您可以在控制器中处理它,而不是将图像的链接放在标记中。 然后在你的控制器中你可以做类似的事情

 send_file @download.wallpapers[1].wallpaper.url, :type => 'image/jpeg', :disposition => 'attachment' 

读这个

Rails 3/4:

在路线:

 get "home/download_pdf" 

在控制器中:

 def download_pdf send_file( "#{Rails.root}/public/your_file.pdf", filename: "your_custom_file_name.pdf", type: "application/pdf" ) end 

在视图中:

 <%= link_to 'Download PDF', home_download_pdf_url %> 

这是使用paperclip的HTML5下载属性的简单解决方案

 <%= link_to item.name, item.asset.url, download: item.asset.original_filename %>