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

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)

  • 这绝对应该是现在接受的答案. (4认同)

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=&lt;file name.ext&gt;
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


rus*_*ils 8

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)

  • 如果在.each迭代中生成链接,并且文件名是动态的,该怎么办? (2认同)