2012-02-02 3 views
2

Rails 응용 프로그램과 다른 원격 서버 (Apache + Tomcat)에 일부 PDF 파일이 있습니다. 그리고 "다른 이름으로 저장"대화 상자에서 확인을 클릭 한 후 사용자가 다운로드 할 수있게하려고합니다.rails 3.1 : 파일 다운로드를 시작하는 데 redirect_가 아닌 이유는 무엇입니까?

그래서 내 컨트롤러에서 다운로드 요청을 처리 할 수있는 작업이 있습니다. 이 작업을 수행하면 PDF의 URL이 으로 리디렉션됩니다. 문제는이 대화 상자는 그러나

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

을 열지 않습니다 나는 PDF에 대한 정규화 된 URL을 브라우저의 주소 표시 줄에 삽입한다면, "다른 이름으로 저장"을 선택한 후 원하는 동작이

일어나는 것입니다

2 개의 요청간에 분명히 차이가 있습니다. 예를 들어 Content-disposition 또는 Content-type을 설정하는 방법을 알지 못해서 그렇지 않습니다. redirect_to를 사용하여 - -

  • 왜 작동하지

    1. 은 "명백한"솔루션 것은 : 아니면, redirect_to는 단순히

      갈 왜 내가 나를 이해하는 데 도움이 수 여기에 사람을 바라고 잘못된 방법입니다 (1)은 선호되는 옵션이 아니며 send_file과 같은 옵션은 더 자주 제안되는 옵션입니다.

    2. send_file을 사용하는 경우 send_file을 호출하기 전에 먼저 파일을 내 레일 서버로 가져와야합니다. 어떻게해야합니까?
  • +0

    그래서 지금 무엇을할까요? 브라우저의 PDF 파일로 가져가시겠습니까? – varatis

    +0

    [Rails 3.1 : Linode에있는 PDF를 클라이언트 컴퓨터에 다운로드하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/9109927/rails-3-1-how-to-download-a-pdf- 컴퓨터에 연결된 linode) –

    +0

    Varatis -> 내가 말할 수있는 한, 아무 일도 일어나지 않고있다. 으로 리디렉션되고 "완료 됨 302ms"메시지가 표시되지만 "다른 이름으로 저장"대화 상자는 표시되지 않습니다. Firebug의 응답 헤더에 올바른 URL이 설정되었습니다. 그러나 Content-type은 text/html입니다. 응용 프로그램/pdf 여야합니다. 설정 헤더 [Content-type]가 도움이됩니까? 여하튼, 나는 두 개의 호출이 Rails 앱과 redirect_to에서 브라우저와의 차이점이 어디인지 알지 못한다. - – Abhinav

    답변

    -1

    이 작동 :

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

    Reed -> Firebug에서 Response 헤더를 보면 Location이 올바른 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" 
    
    관련 문제