Search code examples
ruby-on-railsimagedownloadlink-to

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


I have a link_to Rails helper that downloads a wallpaper when clicked. But the image is loading in the browser instead of being downloaded immediately.

<%= link_to "1920x1080", @download.wallpapers[1].wallpaper.url %>

But at the same time I have a link_to Rails helper that downloads a screensaver of .exe format but here it works as inteded: file being downloaded immediately.

<%= link_to "720p", @download.screensavers.first.screensaver.url %>

What should I add or do so that the images will not be opened in the browser but instead be downloaded immediately?

Thanks!


Solution

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

    Content-Disposition: attachment; filename=&lt;file name.ext&gt;
    

    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