2017-06-21 17 views
0

私が直面している問題は、WebサーバーのCSVボタンのエクスポートを有効にしようとしていることで、ファイルをローカルに保存することができず、現時点では、実際のデータのレンダリングを心配する前に、基本的なCSVファイルをストリーム配信し、サーバからローカルマシンに保存しようとしています。StreamingHttpResponseを使用した大規模なCSVファイルのダウンロードとダウンロード

私は、ボタンをクリックして私のビューの投稿をクリックしてから、レンダリングして返信したいと思っています。これは$アヤックス関数であったが、私は以来、テスト中にそれを変更していると、このように見えるようにそれが今になります

$("#exportbutton").click(function(e){ 
    $.post("{% url 'doner:download' %}", function(data) 
    { 
     console.log(data); 
    }); 
    }) 
ビューのコードは(のCTRL + Vであることを起こるそれはこのようになります

SOからの例):だから

def download(request): 
    def stream(): 
     buffer_ = io.StringIO() 
     writer = csv.writer(buffer_) 
     for row in rows: 
      writer.writerow(row) 
      buffer_.seek(0) 
      data = buffer_.read() 
      buffer_.seek(0) 
      buffer_.truncate() 
      yield data 

    response = StreamingHttpResponse(
     stream(), content_type='text/csv' 
    ) 
    disposition = "attachment; filename=file.csv" 
    response['Content-Disposition'] = disposition 

    return response 

これをいじっの多くは限り私が持っているようになった後、それはストリーム '()バックHTMLページにデータ意志、意志にconsole.log出力? 'ファイル'データしかし、私はファイルやダウンロードの任意の形式を取得しない、単にデータのコンソールにログインします。

StreamingHttpResponseがどのように機能しているのか、私は誤解しているのか分かりません。ストリームを超えてダウンロードするには何かもっとクライアント側で行うつもりですが、私はドキュメントを読んでいます。明らかです。

私は困っているので、どんな助けがあれば大いに感謝します。

答えて

0

私が直面していた問題はjQueryを使って投稿していたのですが、明らかにブラウザはAJAXを使ってファイルをダウンロードできませんでしたので、この部分を修正してファイルをダウンロードするには、AJAXそれはダウンロードれる前行location.replace('doner/download');を追加し、それはそれだった)大丈夫生成されます...

は今、jQueryのは、次のようになります。

$("#exportbutton").click(function(e){ 
    $.post("{% url 'doner:download' %}", function(data) 
    { 
     console.log(data); 
     location.replace("{% url 'doner:download' %}"); 
    }); 
    }) 

し、必要に応じてすべてが動作します!

関連する問題