2010-11-30 3 views
0

のための動的csvファイルを生成します。しかし、クライアントはファイルサイズを見ることができません。これは、進行状況インジケーターを受け取らないことを意味します。Javaは私がダウンロードして利用者にcsvファイル(動的に生成)を返しますサーブレットを書かれているダウンロード

私はこのコード

protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 
    try { 
    String csv = getCsv(); 

    resp.setContentType("text/csv"); 
    resp.setContentLength(csv.getBytes().length); 
    resp.getWriter().write(csv); 
    } catch (Exception e) { 
    log.error("error generating feed", e); 
    } 
} 

を持っているあなたに感謝します。

+0

ここで問題は、正確には何ですか? – ColinD

+1

私は彼が進捗インジケータにファイルのサイズを表示させたいと思うと思う。 – tHeSiD

+0

圧縮(gzipなど)を適用していますか? – thejh

答えて

1

ファイルサイズは、Response Headerに特異Content-Lengthヘッダを送信されます。応答全体をメモリまたはディスクに構築し、サイズを計算し、クライアントが進行状況インジケータを計算する方法を知るために、このサイズのヘッダをContent-Lengthに送信する必要があります。また、いくつかの非標準ブラウザ(IE)でファイルのDispositionを設定して、[ファイルのダウンロード]ダイアログボックスがポップアップし、進捗インジケータで応答を正しく処理する必要があります。

は、実際に送り返されているものをデバッグするために、Firefoxと「ライブHTTPヘッダ」拡張子と「Firebugの」のようなブラウザを使用してみてください。

あなたはこれがそう、それは特定のブラウザかもしれでの作業や追加のブラウザに特定のメタデータを必要とされていないものをブラウザ言っていません。

+0

OPは 'のContent-Length'設定しない:' resp.setContentLength(。csv.getBytes()の長さ)、それを意味するものではありません ' – thejh

+0

は、彼らが正常に言及しないブラウザによって解釈されているが、それはありますなぜ私はFirefoxとLive HTTPヘッダーとFirebugでデバッグを提案したのですか? –

関連する問題