2012-02-10 14 views
5

Pregunta de carriles para principiantes: ¿Cómo se puede devolver un archivo de un controlador en rieles?Devolución de archivos desde raíles

Estoy familiarizado con la devolución/representación de objetos JSON. Sin embargo, nunca he devuelto/procesado un archivo con una extensión arbitraria.

A partir de la lectura de SO, parece que render :nothing => true podría ayudar. Solo estoy buscando orientación o documentación relevante.

+0

posible duplicar: http://stackoverflow.com/questions/1213957/exposing-files-from-a-service-through-a-rails-application – Baldrick

Respuesta

10

Puede usar los rieles incorporados send_file o el método send_data.

de flujo de un archivo (por ejemplo, para un punto final de archivo de proxy), use send_file:

send_file("#{RAILS_ROOT}/path/to/file/on/server", 
    :filename => "client-suggested-filename", 
    :type => "mime/type") 

de flujo de datos generados (por ejemplo, para un pdf generado), el uso SEND_DATA:

send_data(your_data, 
    :filename => "client-suggested-filename", 
    :type => "mime/type") 

El la extensión de archivo y el tipo de mime no tienen que coincidir, pero probablemente deberían ajustarse a las expectativas del usuario final. Por ejemplo, si está enviando con un tipo de mime de application/pdf, realmente debe establecer :filename en something.pdf.

Si no está seguro de qué tipo de mime es para el archivo que está enviando, puede marcar this wikipedia page o utilizar la gema mime-types. (O si está leyendo desde una base de datos que almacena el tipo de mimo, use eso).

+0

'send_data' suena bien. ¡Gracias! – SundayMonday

Cuestiones relacionadas