2012-02-10 23 views
5

Domanda per principianti: Come si restituisce un file da un controller in un binario?Restituzione di file dalle guide

Ho familiarità con il reso/rendering di oggetti JSON. Tuttavia non ho mai restituito/reso un file con un'estensione arbitraria.

Dalla lettura di SO sembra che render :nothing => true possa essere d'aiuto. Sto solo cercando una guida o documentazione pertinente.

+0

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

risposta

10

È possibile utilizzare il sistema di guide incorporato send_file o send_data.

per lo streaming di un file (ad esempio per un endpoint proxy file), utilizzare send_file:

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

per lo streaming di dati generati (ad esempio per un pdf generato), uso Send_Data:

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

Il l'estensione del file e il tipo mime non devono necessariamente coincidere, ma probabilmente dovrebbero essere conformi alle aspettative degli utenti finali. Ad esempio, se si invia con un tipo mime di application/pdf, è necessario impostare realmente lo :filename su something.pdf.

Se non si è sicuri del tipo di mime per il file che si sta inviando, è possibile controllare this wikipedia page o utilizzare la gemma mime-types. (O se stai leggendo da un database che memorizza il tipo mime, usa quello).

+0

'send_data' suona bene. Grazie! – SundayMonday

Problemi correlati