2009-03-05 44 views
2

我遇到了一個問題,在這個問題中,IE不打開像Firefox這樣的Excel文檔的另存爲/打開對話框。使用Internet Explorer打開Excel文檔的問題

所以我創建了一個使用'* .xls'作爲url模式的servlet過濾器。我現在面臨的問題(因爲這是我創建的第一個過濾器)是如何獲取用戶需要的文件的名稱,以便對話框正確填充。目前,當用戶在給定頁面上選擇鏈接時,會調用過濾器。

這裏是我想出了:

以上是我的doFilter()。

String fileName = "fileName.xls"; 

HttpServletRequest httpRequest = (HttpServletRequest) pRequest; 
String requestURI = httpRequest.getRequestURI(); 

if(StringUtils.isNotBlank(requestURI)) 
{ 
    String uri[] = StringUtils.split(requestURI, '/'); 
    fileName = uri[uri.length - 1]; 
} 

HttpServletResponse httpResponse = (HttpServletResponse) pResponse; 
httpResponse.setContentType("application/vnd.ms-excel"); 
httpResponse.setHeader("Content-disposition", "attachment; filename=\"" + fileName +"\""); 

的web.xml:

<filter> 
    <filter-name>ExcelFilter</filter-name> 
    <filter-class>vsg.rp.common.ExcelFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ExcelFilter</filter-name> 
    <url-pattern>*.xls</url-pattern> 
</filter-mapping> 

這一切都工作在我的發展框:Windows XP中,JBoss的是,Eclipse,甲骨文。但是當它運行在測試服務器Linux,Apache/JBoss,Oracle上時,它不起作用。看來,過濾器甚至沒有被調用,沒有錯誤拋出,等等。爲什麼會發生這種情況的任何想法?

回答

5

您想要的內容類型來適當設定以及內容部署標頭,從而:

response.setContentType( 「應用程序/ vnd.ms-EXCEL」);
response.setHeader(「Content-Disposition」, 「attachment; filename = \」「+ filename + 」\「」);

+0

你指出一個文件名變量 - 這是如何設置的? – boyd4715 2009-03-05 19:08:28

0

除了設置內容類型的標題外,還需要確保服務器不會告訴瀏覽器NOT CACHE文件。

在IE的土地上,如果你告訴IE不要緩存文件,它會高興地下載文件...然後嘗試從它保存文件的目錄中打開文件...但是由於標題中顯示「don 't緩存「它需要從字面上,並不保存該文件,因此Excel會拋出一個錯誤,指出」沒有文件!「。

長話短說,告訴IE CACHE文件