15

ユーザーが拡張子.pptのファイルをダウンロードできるようにするコントローラーアクションがあります。これは実際にはパワーポイントのバイナリではなく、パワーポイントが読み取ることができるxml風の形式です。このファイルは、ElementsControllerというコントローラーのshowアクションからダウンロードされますが、showアクションは実際にはコントローラーで定義されていません。ただし、app / views / elements/show.ppt.builderにそのテンプレートファイルがあります。config / initializers/mime_types.rbにMime::Typeを次のように登録しています。

Mime::Type.register "multipart/related", :ppt

ファイルが正しくダウンロードされ、WindowsシステムのPowerPointで開きますが、問題はファイル名です。ファイルの名前は3.pptです。ここで、3はURLのidパラメーターです。ファイル名を3.pptよりも少しわかりやすいものに設定する方法があるかどうか知りたいです。

どうも、

-C

4

3 に答える 3

25

send_dataを使用できます:

send_data pptdata, :filename => 'your_file_name.ppt', 
   :disposition => 'inline', :type => "multipart/related"

これのもう1つの利点は、x-sendfileを使用できることです。これにより、クライアントがデータをダウンロードする間、雑種/シンが待機する必要がなくなります。


別のオプションは、次のようなルートを持つことです。

/elements/3/files/foo.ppt

次に、FilesControllerのshowメソッドで、idパラメーターが何であれ送信できます。

于 2009-03-05T23:02:13.950 に答える
15

考えられる例:

def show
    @item = Item.find(params[:id])
    respond_to do |format|
        format.html # show.html.erb
        format.ppt {
            response.headers['Content-Disposition'] = "attachment; filename=\"#{@item.filename}.ppt\""
        } # show.ppt.erb
        format.xml  { render :xml => @item }
    end
end
于 2010-10-06T19:07:48.987 に答える
5

Ok。これは非常に古い質問に対する回答ですが、Rails 3.2 の時点で最も簡単な方法は次のように設定することです。

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @product }
  format.csv { send_data @product.to_csv, :filename => "New-Product-filename.csv" }
  format.xls 
end

ソース API ドキュメント

于 2013-05-17T14:24:21.387 に答える