2009-03-05 13 views
2

FirefoxのようにExcel文書の[名前を付けて保存]/[開く]ダイアログボックスが開いていないという問題が発生しました。Internet ExplorerでExcel文書を開くときの問題

私は、URLパターンとして '* .xls'を使用しているサーブレットフィルタを作成しました。私が直面している問題(これは私が作成した最初のフィルタなので)は、ダイアログボックスが正しく表示されるように、ユーザーが望むファイルの名前を取得する方法です。現在、フィルタは、ユーザーが指定されたページ上のリンクを選択すると呼び出されます。ここで

は私が思い付いたものです:

以上)私はの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:Windows XPでは、JBossの、Eclipseの、オラクル:

<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> 

このすべては、私の開発ボックスに取り組んでいます。しかし、それがテストサーバー(Linux、Apache/JBoss、Oracle)上で動作する場合、動作しません。フィルタが呼び出されていない、エラーがスローされていないなどのように見えます。

答えて

5

あなたはこのようにして適切に設定されているコンテンツのタイプ、ならびにコンテンツ配置ヘッダたい:

response.setContentType( "アプリケーション/ vnd.ms-Excelを")。
response.setHeader( "Content-Disposition"、 "attachment;ファイル名= \" "+ファイル名+ " \ "");コンテンツタイプのヘッダを設定することに加え

+0

ファイル名変数を指定します。これはどのように設定されますか? – boyd4715

+0

これは、ブラウザであなたに提示したいファイルの名前です。例えばファイル名を "sample.xls"に設定すると、IE/FirefoxなどにExcelをダウンロードし、必要に応じて "sample.xls"として保存します。 –

0

、あなたはまた、サーバがファイルをキャッシュしないようにブラウザを教えてくれないことを確実にしたいと思うでしょう。

IEの土地では、IEにファイルをキャッシュしないように指示すると、ファイルをうまくダウンロードしてからファイルを保存したディレクトリからファイルを開こうとします...しかし、ヘッダーには「donこれを文字通り取り込み、ファイルを保存しないので、Excelは「ファイルがありません!」というエラーをスローします。

ロングストーリーショート、ファイルには、ファイルを教えてください。

関連する問題