2011-01-10 6 views
4

これは説明が難しいので、私は最善を尽くすつもりです。私は正確なコードを提供しているのではなく、単に問題の例です。rails正しいファイル名でファイルをレンダリングする方法

私はレール2.3.8を使用しています。私はUnix上です。

Apacheにアクセスできないディレクトリの下にたくさんのファイルがあります。 (すなわち/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 

私はページ上のリンクを選択すると、私は私の目的のファイルのダウンロードプロンプトを取得しますが、ファイルの名前は「myaction」の代わりに、ファイル名です。

名前を正しく取得する方法について考えてみませんか?

答えて

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

関連する問題