Rails 'link_to' to Download An Image Immediately Instead of Opening it in the Browser

依然范特西╮ 提交于 2019-11-30 08:15:18

Generally, the cleanest way to do this is to set the appropriate header when sending the image:

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

The send_file method will allow you to set this header appropriately if you're serving the file from the filesystem:

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

If the file is stored in your database, you can use send_data instead:

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

Abram

There is an easier way to do this with the HTML5 download attribute.

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

Instead of putting the link of the image in your tag, you can handle it in your controller. And then in your controller you can do something like

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

Read this

Rails 3 / 4:

in routes:

get "home/download_pdf"

in controller:

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

in view:

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

Here's a simple solution using the HTML5 download attribute with paperclip

<%= link_to item.name, item.asset.url, download: item.asset.original_filename %>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!