ruby on rails - link_to - enlace de descarga de archivos en rieles
rails link_to class (5)
Me gustaría dar a los visitantes la opción de descargar algunos pdf. Yo he tratado:
<%= link_to "abc", "/data/abc.pdf"%>
<%= link_to "abc", "/data/abc.pdf", :format => ''pdf'' %>
y algunas variaciones, pero no parecen funcionar. Sigo obteniendo No route matches [GET] "/data/abc.pdf"
Tengo los archivos pdf en una carpeta llamada datos, ubicada en la carpeta de activos. Cualquier ayuda sería apreciada.
Lucha mucho para encontrar una forma simple de descargar automáticamente algunos archivos del directorio público. Finalmente, se me ocurre esta solución. Por ejemplo: tengo mi archivo en la carpeta SVG dentro del directorio público.
Public/svg/Test1.xlsx
Ahora, cuando intento acceder, lo cargo y Give Path with Paper clip da problemas. Incluso cuando pruebo la ruta completa también da problemas, así que podemos hacer que sea una ruta dinámica. Primero obtenga la ruta del host para poder redirigir fácilmente. <% url = request.original_url.chomp (request.fullpath)%>
Ahora podemos acceder a cualquier archivo en la carpeta pública, como a continuación, y pasar la opción de descarga y descarga. Opción de descarga renombre cualquier archivo que desee descargar.
<%= link_to ''Database File'', "#{url}/svgs/Test1.xlsx", download: ''Data.xlsx'',id: "Link_to_Downlaod" %>
Ahora el enlace "Haga clic en" está listo. Podemos hacer clic en el enlace de arriba para descargar el archivo. Use la siguiente secuencia de comandos para descargar automáticamente el archivo.
<script type="text/javascript">
window.onload = document.getElementById(''Link_to_Downlaod'').click();
</script>
</div>
Para el caso de PDF o cualquier otro tipo de archivo solo necesita cambiar la extensión del archivo.
Rails 4:
en rutas:
get "home/download_pdf"
en controlador (ya tiene pdf):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
en controlador (necesidad de generar pdf):
require "prawn"
class ClientsController < ApplicationController
def download_pdf
client = Client.find(params[:id])
send_data generate_pdf(client),
filename: "#{client.name}.pdf",
type: "application/pdf"
end
private
def generate_pdf(client)
Prawn::Document.new do
text client.name, align: :center
text "Address: #{client.address}"
text "Email: #{client.email}"
end.render
end
end
en vista:
<%= link_to ''Download PDF'', home_download_pdf_url %>
Si los archivos son estáticos (lo que significa que no cambian), colóquelos en la carpeta pública.
Entonces puedes descargar como
<a href="file.pdf" download>PDF</a>
o con ERB
<%= link_to ''PDF'', ''file.pdf'', download: '''' %>
y para darle al archivo otro nombre para descargar, solo pase ese nombre a la opción de descarga
<%= link_to ''PDF'', ''file.pdf'', download: ''data'' %>
Esto descargará el archivo como data.pdf
lugar de file.pdf
.
simplemente puede llamar a su acción de controlador de esta manera
<%= link_to "Download", download_file_path, class: "btn btn-sm btn-default", target: "_blank" %>
y en tu controlador
def download_file
redirect_to paperclip_attachment.file.url
end
Rails 4:
en rutas:
get "home/download_pdf"
en controlador (ya tiene pdf):
def download_pdf
send_file(
"#{Rails.root}/public/your_file.pdf",
filename: "your_custom_file_name.pdf",
type: "application/pdf"
)
end
en controlador (necesidad de generar pdf):
require "prawn"
class ClientsController < ApplicationController
def download_pdf
client = Client.find(params[:id])
send_data generate_pdf(client),
filename: "#{client.name}.pdf",
type: "application/pdf"
end
private
def generate_pdf(client)
Prawn::Document.new do
text client.name, align: :center
text "Address: #{client.address}"
text "Email: #{client.email}"
end.render
end
end
en vista:
<%= link_to ''Download PDF'', home_download_pdf_url %>
Carriles 3
La forma de hacerlo:
def download
send_data pdf,
:filename => "abc.pdf",
:type => "application/pdf"
end
Deberías ir a esta alternativa
Rieles <3
Archivo en carpeta pública
Esta puede ser la respuesta para usted: Cómo descargar un archivo desde la aplicación de rieles
Debes colocar tu archivo en una carpeta pública, ese es el truco.
Debería funcionar cuando el archivo se coloca correctamente.
Avíseme si no puede mover su archivo a la carpeta pública.
Descargar a través del controlador
Crea un controlador con una acción downlaod y link_to
def download
send_file ''/assets/data/abc.pdf'', :type=>"application/pdf", :x_sendfile=>true
end