Возврат файлов с рельсов - PullRequest
5 голосов
/ 10 февраля 2012

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

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

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

1 Ответ

14 голосов
/ 10 февраля 2012

Вы можете использовать встроенные рельсы 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 используется для файла, который выотправляя, вы можете проверить эту страницу википедии или использовать mime-types gem.(Или, если вы читаете из базы данных, в которой хранится тип MIME, используйте это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...