Подтвердить что ты не робот

Rails 'link_to' для немедленного скачивания изображения вместо его открытия в браузере

У меня есть помощник link_to Rails, который загружает обои при нажатии. Но изображение загружается в браузере, а не сразу загружается.

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

Но в то же время у меня есть помощник link_to Rails, который загружает скринсейвер формата .exe, но здесь он работает как inteded: файл загружается немедленно.

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

Что следует добавить или сделать так, чтобы изображения не открывались в браузере, а загружались сразу?

Спасибо!

4b9b3361

Ответ 1

Как правило, самый чистый способ сделать это - установить соответствующий заголовок при отправке изображения:

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

Метод 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

Ответ 2

Существует более простой способ сделать это с помощью атрибута загрузки HTML5.

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

Ответ 3

Вместо того, чтобы поместить ссылку изображения в свой тег, вы можете обработать его в своем контроллере. И затем в вашем контроллере вы можете сделать что-то вроде

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

Прочитайте this

Ответ 4

Рельсы 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 %>

Ответ 5

Здесь простое решение, использующее атрибут загрузки HTML5 с помощью paperclip

<%= link_to item.name, item.asset.url, download: item.asset.original_filename %>