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 %>
Что следует добавить или сделать так, чтобы изображения не открывались в браузере, а загружались сразу?
Спасибо!
Ответы
Ответ 1
Как правило, самый чистый способ сделать это - установить соответствующий заголовок при отправке изображения:
Content-Disposition: attachment; filename=<file name.ext>
Метод 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 %>