nei*_*ion 18 ruby-on-rails image download link-to
我有一个link_to Rails助手,可以在单击时下载壁纸.但是图像正在浏览器中加载而不是立即下载.
<%= link_to "1920x1080", @download.wallpapers[1].wallpaper.url %>
Run Code Online (Sandbox Code Playgroud)
但同时我有一个link_to Rails帮助程序,它可以下载.exe格式的屏幕保护程序,但是这里它的工作方式是:立即下载文件.
<%= link_to "720p", @download.screensavers.first.screensaver.url %>
Run Code Online (Sandbox Code Playgroud)
我应该添加或执行哪些操作,以便图像不会在浏览器中打开,而是立即下载?
谢谢!
Abr*_*ram 36
使用HTML5下载属性可以更轻松地完成此操作.
<%= link_to 'Download existing avatar', @user.avatar(:original), download: "User_#{@user.id}_avatar" %>
Run Code Online (Sandbox Code Playgroud)
vin*_*ceh 14
您可以在控制器中处理它,而不是将图像的链接放在标记中.然后在你的控制器中你可以做类似的事情
send_file @download.wallpapers[1].wallpaper.url, :type => 'image/jpeg', :disposition => 'attachment'
Run Code Online (Sandbox Code Playgroud)
读这个
Sea*_*ins 12
通常,最简单的方法是在发送图像时设置适当的标题:
Content-Disposition: attachment; filename=<file name.ext>
Run Code Online (Sandbox Code Playgroud)
如果您从文件系统提供文件,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
Rails 3/4:
在路线:
get "home/download_pdf"
Run Code Online (Sandbox Code Playgroud)
在控制器中:
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
Run Code Online (Sandbox Code Playgroud)
在视图中:
<%= link_to 'Download PDF', home_download_pdf_url %>
Run Code Online (Sandbox Code Playgroud)