2011-05-19 15 views
10

¿Cuál es la mejor manera de crear un enlace de descarga? ¿Hay una mejor manera que la siguiente?Cómo crear un enlace de descarga

Estaba pensando en usar link_to "Download", :controller => ..., :action => ...", :id => ... en la vista.

Adición match /documents/download/:id => documents#download a routes.rb

Y en el controlador:

def download 
    send_file ... 
end 

También, me gustaría, si es posible, para que el usuario permanezca en la misma página que el enlace.

Gracias.

+0

¿Está enviando archivos muy grandes o generados dinámicamente? – dwhalen

+0

@Danny Rockets: Sí, los archivos se generan dinámicamente. – tendans6

+0

http://stackoverflow.com/questions/6392003/how-to-download-a-file-from-rails-application – sybind

Respuesta

7

Agregué la acción de descarga como una ruta de descanso en un bloque de recursos. Aquí está el código típico para mí:

routes.rb

resources :things do 
    member do 
     get :download 
    end 
    end  

modelo:

has_attached_file :document, 
    :path => ':rails_root/assets/documents/:id/:basename.:extension' 
    attr_protected :document_file_name, :document_content_type, :document_file_size 

controlador:

def download 
    send_file @thing.document.path, :type => 'application/pdf', :filename => @thing.permalink 
    end 

vista:

<%= link_to 'Download', download_thing_path(@thing) %> 

Esto mantiene al usuario en la misma página, y solo inicia la descarga con mi nombre sugerido (yo uso el enlace permanente).

¿Qué quiere decir dinámicamente generado? ¿Han sido cargados por usted o creados por su aplicación sobre la marcha?

+0

Interpreté que la pregunta significa cualquier cosa no estáticamente disponible como una imagen de icono precargada o un archivo de texto de licencia. En mi caso (texto, doc, pdf), los archivos son generados y cargados por un grupo de usuarios; el aspecto dinámico proviene de la naturaleza ad hoc de las cargas. – tendans6

+1

Si lo entiendo correctamente, entonces su: escriba su acción de descarga podría ser @ thing.document_content_type en lugar de la 'aplicación/pdf' en mi ejemplo. – Preacher

2

Se podía tener su lógica de descarga en su programa de acción y darle:

<%= link_to "Download", document_path(document) %> 

Estoy bastante seguro de que la: Controlador /: action /: Identificación del método de vinculación está mal visto.

+1

Modificar la ruta para ser: coincidencia/documentos/descargar /: id => documentos # descargar: como =>: document – brycemcd

1

Acabo de crear un enlace Descargar .mp3 y utilizarlo en mi archivo .htaccess.

<Files *.mp3> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</Files> 

Me pareció más fácil que cualquier otra solución.

Cuestiones relacionadas