2012-02-10 2 views
5

Вопрос для начинающих рельсов: Как вернуть файл с контроллера в рельсы?Возвращаемые файлы с рельсов

Я знаком с возвратом/рендерингом объектов JSON. Однако я никогда не возвращал/не выводил файл с произвольным расширением.

От чтения вокруг SO это звучит как render :nothing => true может помочь. Я просто ищу руководство или соответствующую документацию.

+0

Возможный дубликат: http://stackoverflow.com/questions/1213957/exposing-files-from-a-service-through-a-rails-application – Baldrick

ответ

10

Вы можете использовать встроенные рельсы send_file или send_data.

Для воспроизведения файла (например, для файлов прокси конечной точки), используйте send_file:

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

Для потоковой передачи сгенерированных данных (например, для сгенерированного PDF), использование send_data:

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

расширение файла и тип mime не должны совпадать, но они, вероятно, должны просто соответствовать ожиданиям конечных пользователей. Например, если вы отправляете с типом mime application/pdf, вы действительно должны установить :filename в something.pdf.

Если вы не знаете, какой тип mime для отправляемого файла, вы можете проверить this wikipedia page или использовать жемчужину mime-types. (Или, если вы читаете из базы данных, в которой хранится тип mime, используйте это).

+0

'send_data' звучит хорошо. Благодаря! – SundayMonday

Смежные вопросы