Rails 'ссылка на', чтобы загрузить изображение сразу, а не открывать его в браузере


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

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

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

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

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

Спасибо!

5 16

5 ответов:

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

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

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

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

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

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

Читать это

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

Вот простое решение, использующее атрибут загрузки HTML5 с скрепкой

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