2

Web アプリケーションで、ユーザーがレポートを Excel/csv 形式でダウンロードできる機能を提供する必要があります。Excelを作成するWebアプリケーションでモジュールを作成したら、それを読んでブラウザに送信しました。正しく動作していました。今回は、ファイル システムをそのレベルで制御できないため、Excel ファイルを生成したくありません。1 つの方法は、StringBuffer で適切なコードを生成し、正しい contenttype を設定することだと思います (このアプローチについてはわかりません)。他のチームにもこの機能がありますが、データが非常に大きい場合に苦労しています。データのサイズが非常に大きくなる可能性があることを考慮して、この機能を提供する最良の方法は何ですか。クライアントが気付かずにデータをチャンクで送信することは可能ですか (ダウンロードの遅延を除く)。追加するのを忘れていた問題の 1 つは、非常に大きなデータがある場合です。サーバー側でも問題が発生します(CPU使用率とメモリ消費)。500 のような一定量のレコードを読み取り、それをクライアントに送信してから、完了するまでさらに 500 を読み取ることは可能ですか。

4

2 に答える 2

2

CSV の代わりに HTML を生成し、コンテンツ タイプを Excel に設定することもできます。これは、色付けやスタイル付きのテキストに適しています。

クライアントがその圧縮を受け入れる場合は、gzip 圧縮を使用することもできます。通常、サーブレット フィルターなどの標準的な手段があります。

StringBuffer またはより優れた StringBuilder ではありません。それをストリーミングする方が良いです。setContentength を呼び出さない (できない) 場合、出力はチャンクになります (予測進行なし)。

于 2012-04-16T21:35:12.153 に答える
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();
于 2012-05-28T09:13:23.540 に答える