ウェブアプリケーションでExcelの/ CSV形式でレポートをダウンロードできる機能を提供する必要があります。いったん私はエクセルを作成し、それを読んでブラウザに送ったWebアプリケーションでモジュールを作りました。それは正しく働いていた。今回は、ファイルシステムを制御するレベルがないため、Excelファイルを生成したくありません。私は1つの方法は、StringBufferで適切なコードを生成し、正しいcontenttype(私はこのアプローチについてはわからない)を設定することだと思います。他のチームもこの機能を備えていますが、データが非常に大きいときには苦労しています。データのサイズを考えると、この機能を提供する最良の方法は非常に大きい可能性があります。クライアントに気付かないでチャンクでデータを送信することは可能ですか(ダウンロードの遅延を除く)。 追加することを忘れた1つの問題は、非常に大きなデータがある場合、またサーバー側で問題を作成する(CPU使用率とメモリ消費)ということです。私は500のようなレコードの固定量を読んで、それをクライアントに送ってから、完成まで別の500を読むことが可能ですか?Javaを使用して大容量のcsvファイルを効率的にダウンロードする方法
2
A
答えて
2
また、CSVではなくHTMLを生成して、コンテンツタイプをExcelに設定することもできます。これは、着色やスタイル付きのテキストに適しています。
クライアントが圧縮を受け入れる場合、gzip圧縮を使用することもできます。通常、サーブレットフィルタのような標準的な手段があります。
決してStringBufferまたはよりよいStringBuilder。それをストリーミングする方が良い。 setContentengthを呼び出すことができない(できない)場合、出力は(予測的な進歩なしに)チャンクされます。
0
URL url = new URL("http://localhost:8080/Works/images/address.csv");
response.setHeader("Content-Type", "text/csv");
response.setHeader("Content-disposition", "attachment;filename=myFile.csv");
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
int len;
byte[] buf = new byte[1024];
while ((len = stream.read(buf)) > 0) {
outs.write(buf, 0, len);
}
outs.close();
関連する問題
- 1. 効率的なファイルへの大容量ファイルのダウンロード
- 2. 大容量ファイルを効率的に反復処理する
- 3. Linuxでmod_xsendfileを使用して大容量ファイルをダウンロードする
- 4. 大容量ファイルシステムのファイルリストを効率的に取得する
- 5. CSVをJavaを使用してファイルにダウンロードする方法
- 6. 大容量ファイルのダウンロード用のMD5チェックサム
- 7. Java - 大量のString配列を効率的に格納する方法
- 8. 大容量のcsvファイルから最後の行を効率的に読み取る
- 9. 大量の変数を使用して大きなデータを効率的に最適化する方法
- 10. 大量のファイルを効率的に反復する方法(1 mill +)
- 11. 効率的なcsvファイルのアップロード方法
- 12. 大量のオーディオファイルをフォーマットする最も効率的な方法
- 13. CSVファイルから大量のデータをJavaのSQLite DBに効率的に追加する
- 14. JAVAを使用した大容量ファイル用のオーディオストリーミングサーバー
- 15. Pythonを使用して大量のデータをCassandraに効率的に挿入する方法は?
- 16. パンダを使用して大容量のCSVファイルをクラッシュさせることなく効率的に読み取る
- 17. PHPのトラッキング大容量ファイルのダウンロード数
- 18. 巨大なCSVファイルのデータを効率的に読み取る
- 19. Javaで大量のXMLファイルの先頭に属性を追加する最も効率的な方法は?
- 20. 大容量の大容量ファイル
- 21. ファイルをダウンロードするjava8ストリームの効率的な方法
- 22. 大量のデータをデータベースに保存する最も効率的な方法
- 23. Groovy/GParsを使用してCSVファイルの行を最も効率的に処理する方法は?
- 24. リストとCSVファイルを使用した効率的なカウント/ソート
- 25. 大量のバイトデータをC++からJavaへ効率的に転送する
- 26. Ford Fulkersonを使って効率的に最大流量を計算する
- 27. 大量のリストをHTMLで効率的に表示する
- 28. BZ2 JSON twitterファイルを使用して大きな(30GB +)TARファイルをPostgreSQLに効率的に読み込む方法
- 29. Javaで効率的にする方法
- 30. 大容量/低速接続での大容量ファイルのアップロード方法
これを説明してください:決してStringBufferまたはよりよいStringBuilderそれをストリーミングする方が良い。 – dmay
StringBufferが(不要な)同期化を行っているため、StringBufferは後のStringBuilderよりパフォーマンスが劣ります。もちろん、StringB *で最初にたくさんのものを集めてから流すことは望ましくありません。それをストリーミングするパイプラインは、特にマルチユーザーのシナリオでは非常に効率的です。 –
私は約1000レコードのデータベースを照会し、それをクライアントに送り、次のバッチを取り出します。これは私のメモリフットプリントを非常に減少させます。私は、プロファイラでメモリをテストしてチェックしており、うまくいきます。今では、私のアプリケーションは大量のメモリを使いません。私は、使用されるメモリがクリティカルレベルに達するたびにガベージコレクションされることをプロファイラで確認できます。 – dmay