2011-01-10 2 views
4

이것은 설명하기가 힘듭니다. 그래서 최선을 다할 것이며, 사람들이 더 많은 정보를 필요로한다면 질문을 편집 할 것입니다. 정확한 코드를 제공하지는 않지만 문제의 예일뿐입니다.레일스 올바른 파일명으로 파일을 렌더링하는 방법

레일 2.3.8을 사용하고 있습니다. 나는 유닉스에있다.

나는 아파치가 접근 할 수없는 디렉토리 아래에 많은 파일을 가지고있다. (예 : /data/files/file.rpk)

필자는 다음과 같은 것을 가지고 있습니다.

link_to "RPK File", :controller => 'mycontroller', :action=> 'myaction', :file => '/data/files/file.rpk' 

다음은 내 컨트롤러에 있습니다.

def myaction 
    if FileTest.exists?(params[:file]) 
    render :file => params[:file] 
    end 
end 

내가 내 원하는 파일을 다운로드 프롬프트가 페이지의 링크를 선택하지만, 파일 이름 대신에 파일 이름의 "시켜라"입니다

.

올바르게 이름을 지정하는 방법에 대한 생각?

답변

8

send_file과 비슷한 소리입니다. x_sendfile 옵션을 사용하면 실제 파일을 전송하는 동안 작업자가 계속 바쁠 수 없습니다. 자세한 내용은 this blogpost에서 확인할 수 있습니다.

send_file path_to_file_on_filesystem, :type => "application/zip", :x_sendfile => true 
+0

아, 예'send_file'이 여기에 더 적합한 선택입니다. 멋지다. –

+0

나를 위해 일했습니다! 고맙습니다! –

8

:filename 옵션과 함께 send_data을 사용하려고합니다. API documentation을 참조하십시오.

당신은 이되고 싶습니다. 그래도에주의해야합니다. 결코 클라이언트/사용자를 신뢰하지 마십시오! 시스템에있는 임의의 파일을 읽으려면 file=../../../../etc/group 또는 무엇인가를 보내므로 모든 파일 읽기 방법에 전달하기 전에 해당 값을 살균해야합니다.

+0

이것은 유용한 답변이기도합니다. – Kirby

관련 문제