2010-09-02 64 views
0

我想從servlet響應中下載一個excel表格。從servlet響應中下載Excel表格

當我點擊鏈接發送請求到服務器返回一個Excel工作表,保存/保存爲對話框打開要求保存Excel表。這是一個預期的行爲。

但是在兩者之間,如果我嘗試使用IE 6或更低版本,那麼點擊鏈接後會打開一個新窗口。然後打開Save/Save As對話框。

其他操作按預期運行,但問題是,新窗口顯示消息無法打開頁面。

有什麼辦法,我可以避免打開這個新窗口?

我想保存/另存爲對話框直接出現在單擊鏈接的同一個窗口中。

回答

0

我已經看到新窗口打開了很多次,但從來沒有在它內部的錯誤。

嘗試在IFrame中啓動下載。如果下載本身仍然觸發,可能有助於隱藏錯誤信息。最好找出錯誤顯示的原因並停止它,但如果失敗了,您至少可以將其隱藏起來。

儘管我已經看到IE在iframe中出現錯誤(它會偶爾會出現framebust),但我認爲這只是與非標準協議處理程序有關,而不是HTTP錯誤。

1

如果你想從一個servlet(或者實際上任何web應用程序)發送一個應該被視爲下載的響應,你可以通過給出正確的內容處置來做到這一點(你甚至可以指定獨立於URI):

 
HttpServletResponse res = ... 
/* 
* set headers 
*/ 
res.setContentType("application/vnd.ms-excel"); 
res.setHeader("Content-Disposition", "attached; filename=my-workbook.xls"); 
/* 
* pass the download to the response 
*/ 
try { 
    OutputStream out = res.getOutputStream(); 
    InputStream in = this.download.getInputStream(); 
    byte[] buffer = new byte[res.getBufferSize()]; 
    int available = in.read(buffer); 
    while (available > 0) { 
     out.write(buffer, 0, available); 
     available = in.read(buffer); 
    } 
    in.close(); 
    out.flush(); 
    out.close(); 
} catch (IOException e) { 
    // handle exception 
}