ruby-on-rails - how - link_to edit
Rails ''link_to'' para descargar una imagen inmediatamente en lugar de abrirla en el navegador (5)
Tengo un link_to Rails helper que descarga un fondo de pantalla cuando se hace clic. Pero la imagen se está cargando en el navegador en lugar de descargarse inmediatamente.
<%= link_to "1920x1080", @download.wallpapers[1].wallpaper.url %>
Pero al mismo tiempo, tengo un enlace para el asistente de Rails que descarga un protector de pantalla en formato .exe, pero aquí funciona como un archivo intacto: el archivo se descarga de inmediato.
<%= link_to "720p", @download.screensavers.first.screensaver.url %>
¿Qué debo agregar o hacer para que las imágenes no se abran en el navegador, sino que se descarguen de inmediato?
¡Gracias!
Aquí hay una solución simple utilizando el atributo de descarga HTML5 con un clip
<%= link_to item.name, item.asset.url, download: item.asset.original_filename %>
En general, la forma más limpia de hacerlo es establecer el encabezado apropiado al enviar la imagen:
Content-Disposition: attachment; filename=<file name.ext>
El método send_file le permitirá configurar este encabezado adecuadamente si está sirviendo el archivo desde el sistema de archivos:
http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_file
Si el archivo está almacenado en su base de datos, puede usar send_data en su lugar:
http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_data
En lugar de poner el enlace de la imagen en su etiqueta, puede manejarlo en su controlador. Y luego en tu controlador puedes hacer algo como
send_file @download.wallpapers[1].wallpaper.url, :type => ''image/jpeg'', :disposition => ''attachment''
Lee http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_file
Hay una forma más fácil de hacer esto con el atributo de descarga HTML5 .
<%= link_to ''Download existing avatar'', @user.avatar(:original), download: "User_#{@user.id}_avatar" %>
Rieles 3/4:
en rutas:
get "home/download_pdf"
en el controlador:
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
en vista:
<%= link_to ''Download PDF'', home_download_pdf_url %>