0

サーバー側で Excel ファイルを生成し、次の応答ヘッダーを使用して出力ストリームに書き込みます。

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+fileName);

私のクライアント側では: 示されているように、サーブレットへの ajax 呼び出し:

Ext.Ajax.request({
            url: 'GenerateReport',
            method: 'GET',
            params: {
                'start_date': sd.getValue(),
                'end_date':ed.getValue()
            }
 });

ブラウザには、次の応答ヘッダーが表示されます。 ここに画像の説明を入力

私の問題 : [開く] と [保存] ダイアログ プロンプトが開きません。

4

3 に答える 3

1

AJAX リクエストではなく、適切な URL で新しいウィンドウを開いてみてください。

于 2013-09-04T10:08:54.933 に答える
0

Openブラウザーがプロンプトまたはを確実に表示するには、バイナリコンテンツ タイプSaveを送信する必要があります。それ以外の場合、ブラウザーはダウンロードしたファイルを関連付けられたアプリケーションで開こうとします。一部のブラウザー (古い IE など) では、ファイル名の拡張子から関連付けられているアプリケーションを推測する場合があります。

response.setContentType("アプリケーション/オクテットストリーム");

于 2013-09-05T10:48:17.207 に答える
0

ありがとう@liya。ajax呼び出しの代わりにiframeを使用して解決しました。直接ダウンロードされます。ここにあります:

Ext.core.DomHelper.append(document.body, {
            tag : 'iframe',
            id : 'downloadIframe',
            frameBorder : 0,
            width : 0,
            height : 0,
            css : 'display:none;visibility:hidden;height:0px;',
            src : 'GenerateReport'
   });

とにかく、ダウンロードする前にダイアログボックスを開き、ファイルを直接保存する代わりに「開く」または「保存」するように促します。

于 2013-09-04T10:15:23.247 に答える