2012-02-10 1 views
5

初心者質問:レールからコントローラにファイルを返すにはどうすればよいですか?レールからファイルを返す

私はJSONオブジェクトの返却/レンダリングに精通しています。しかし、私は返された/任意の拡張子を持つファイルをレンダリングしたことはありません。

そんなことを読んでいるので、render :nothing => trueのように聞こえるかもしれません。私はいくつかのガイダンスや関連する文書を探しています。

+0

可能な複製:http://stackoverflow.com/questions/1213957/exposing-files-from-a-service-through-a-rails-application – Baldrick

答えて

10

組み込みレールsend_fileまたはsend_dataメソッドを使用できます。 (ファイルプロキシエンドポイント用など)のファイルをストリームに

、send_file使用:

send_file("#{RAILS_ROOT}/path/to/file/on/server", 
    :filename => "client-suggested-filename", 
    :type => "mime/type") 

を(生成されたPDFのために例えば)生成されたデータをストリーミングするには、SEND_DATAを使用します。

send_data(your_data, 
    :filename => "client-suggested-filename", 
    :type => "mime/type") 

ファイル拡張子とMIMEタイプは一致する必要はありませんが、おそらくエンドユーザーの期待に合致するはずです。たとえば、MIMEタイプがapplication/pdfの場合は、実際には:filenamesomething.pdfに設定する必要があります。

送信するファイルのMIMEタイプがわからない場合は、this wikipedia pageをチェックするか、mime-types gemを使用してください。 (または、あなたがMIMEタイプを格納しているデータベースから読んでいるなら、それを使用してください)。

+0

「send_data」がうまく聞こえます。ありがとう! – SundayMonday