2012-02-02 4 views
2

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

Итак, в моем контроллере у меня есть действие для обработки запросов на загрузку. Это действие просто перенаправляет_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. Как я могу это сделать?
+0

Так что же, не так ли? просто привезите вас в pdf в своем браузере? – varatis

+0

Возможный дубликат [Rails 3.1: Как загрузить PDF-файл, размещенный на Linode, на клиентский компьютер?] (Http://stackoverflow.com/questions/9109927/rails-3-1-how-to-download-a-pdf- встроенный-на-linode-to-client-computer) –

+0

Варатис -> Насколько я могу судить, ничего особенного не происходит. Я получаю сообщение «Переадресовано на » и «Заполнено 302 Найдено в 126 мс», но нет диалогового окна «Сохранить как». Заголовок ответа в Firebug имеет местоположение, установленное на правильный URL. Но Content-type - text/html - который, я думаю, должен быть application/pdf. Помогли ли настройки заголовков [Content-type]? Во всяком случае, я не знаю, где разница b/w 2 звонка - redirect_to из приложения Rails и прямой вызов из браузера - лежит – Abhinav

ответ

-1

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

def sendfile(path) 
    headers["Location"] = path 
    redirect_to(path)   
    end 
+1

Reed -> Если я вижу заголовок Response в Firebug, тогда для местоположения установлено значение правильный URL. В таком случае необходимо ли это сделать? С другой стороны, Content-type является «text/html», что, очевидно, неверно. Разве это не должно измениться? – Abhinav

0

Попробуйте

def download 
    url = "#{server}/...../file.pdf" 
    send_file url, :type=>"application/pdf" 
end 
0

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

Content-Disposition: attachment; filename="fname.ext" 
Смежные вопросы