rails 3.1: почему не redirect_to инициирует загрузку файла? - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть несколько файлов PDF на удаленном сервере (Apache + Tomcat), отличных от того, на котором работает приложение Rails. И я хочу, чтобы пользователи могли загружать их после нажатия кнопки «ОК» в диалоговом окне «Сохранить как»

Итак, в моем контроллере у меня есть действие для обработки запросов на загрузку. Это действие просто redirects_to URL-адрес PDF. Проблема в том, что диалоговое окно «Сохранить как» не открывается

def download
  url = "#{server}/...../file.pdf"
  redirect_to url
end 

Однако, если я возьму полный URL-адрес для PDF-файла и вставлю его в адресную строку браузера, произойдет желаемое поведение

Очевидно, что разница между двумя запросами очевидна. У меня нет - потому что я не знаю, как - например, установить Content-disposition или Content-type. Или, возможно, redirect_to - просто неправильный путь

И поэтому я надеюсь, что кто-то здесь может помочь мне понять, почему:

  1. «очевидное» решение - использование redirect_to - не работает
  2. Почему (1) может не быть предпочтительным вариантом, а такие параметры, как send_file, - это то, что предлагается чаще.
  3. Если send_file - это то, что нужно, то мне нужно сначала перенести файл на мой сервер Rails, прежде чем вызывать send_file. Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 13 августа 2012

Попробуйте

def download
  url = "#{server}/...../file.pdf"
  send_file url, :type=>"application/pdf"
end
0 голосов
/ 02 декабря 2015

Установите заголовок Content-Disposition для вложения с именем файла, для которого пользователь хочет загрузить файл.Как то так ...

Content-Disposition: attachment; filename="fname.ext"
0 голосов
/ 02 февраля 2012

Это работает:

  def sendfile(path)
    headers["Location"] = path
    redirect_to(path)         
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...