我有一个link_to Rails助手,可以在点击时下载壁纸。但是图像正在浏览器中加载而不是立即下载。
<%= link_to "1920x1080", @download.wallpapers[1].wallpaper.url %>
但与此同时,我有一个link_to Rails帮助程序,可以下载.exe格式的屏幕保护程序,但此处它的工作方式是:立即下载文件。
<%= link_to "720p", @download.screensavers.first.screensaver.url %>
我应该添加或执行哪些操作,以便图像不会在浏览器中打开,而是立即下载?
谢谢!
答案 0 :(得分:34)
使用HTML5 download attribute可以更轻松地完成此操作。
<%= link_to 'Download existing avatar', @user.avatar(:original), download: "User_#{@user.id}_avatar" %>
答案 1 :(得分:14)
您可以在控制器中处理它,而不是将图像的链接放在标记中。然后在您的控制器中,您可以执行类似
的操作send_file @download.wallpapers[1].wallpaper.url, :type => 'image/jpeg', :disposition => 'attachment'
阅读this
答案 2 :(得分:12)
通常,最简单的方法是在发送图像时设置适当的标题:
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
答案 3 :(得分:8)
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 %>
答案 4 :(得分:3)
这是使用带回形针的HTML5下载属性
的简单解决方案<%= link_to item.name, item.asset.url, download: item.asset.original_filename %>