2010-11-30 68 views
0

我已經編寫了一個servlet,它將一個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 2010-11-30 20:29:15

+1

我假設他希望進度指示器顯示文件的大小。 – tHeSiD 2010-11-30 20:42:33

回答

1

文件大小發送Response Header,特別是Content-Length標題。您必須在內存或磁盤上構建整個響應,然後計算其大小併發送帶有此大小的標頭,以便客戶端知道如何計算進度指示器。您還需要使用一些非標準瀏覽器(IE)來設置文件的Disposition以使下載文件對話框彈出並使用進度指示器正確處理響應。

嘗試使用Firefox等瀏覽器和'Live HTTP Headers'擴展名和'Firebug'來調試實際發回的內容。

你不說什麼瀏覽器不工作,所以它可能是瀏覽器特定的,需要額外的瀏覽器特定的元數據。