3

ダウンロード機能を作りたいsinatraアプリがあります。このダウンロードは、テーブルからデータを取得し、Excel を作成してユーザー用にダウンロードします。

require 'csv'
get '/download' do 
     data = [{:name => "john", :age => 12, :state => 'ca'}, {:name => "tony", :age => 22, :state => 'va'}]

     # I want to download this data as excel file and the content of file should be as follows:
     # name,age,state
     # john,12,ca
     # tony,22,va
     # I don't want to save data as a temp file on the server and then throw to user for download 
     # rather I want to stream data for download on the browser. So I used this, 
     # but it is not working

     send_data (data, :type => 'application/csv', :disposition => 'attachment')
end

私は何を間違っていますか?または、私がやろうとしていることを達成する方法は?http://sinatra.rubyforge.org/api/classes/Sinatra/Streaming.htmlをフォローしようとしていました

更新: 私はシナトラの send_data メソッドと結婚していません。ストリーミングがその期間サーバーをブロックする場合、私は代替案を受け入れます.

4

1 に答える 1

5
get '/download' do 
    data = [{:name => "john", :age => 12, :state => 'ca'}, {:name => "tony", :age => 22, :state => 'va'}]

    content_type 'application/csv'
    attachment "myfilename.csv"
    data.each{|k, v|
       p v
    }
end

これは私にとってはうまくいきます。Excelファイルにヘッダーとコンマを改行で入れる必要があるため、不完全であることはわかっています。しかし、これは機能します。

于 2012-11-12T05:01:16.720 に答える