1

ユーザーが日付範囲を入力できるようにし、その日付範囲に基づいて取得されたデータを含むExcelファイルをダウンロードできるようにしたい。

最初は、同じページのGETリクエストとしてフォームを送信することでこれを機能させました。GETパラメータが存在する場合、ページはデータを取得し、必要なヘッダーを出力してからデータを出力します。次にexit;、プロセスからページが読み込まれないようにします(Excelデータとともにヘッダーを送信する必要があったため)。

これは機能します。ただし、データが送信されると消える進行状況インジケーターを含めたいと思います。しかし、私はこれを行う方法を見つけることができません。

フォーム送信ボタンを押すとこのようなインジケーターを開始できますが、ドキュメントがダウンロード用に出力された後、オフにする方法が見つかりません。

ところで、Ajaxはこの種の状況では機能しません。

誰かがこれを行う方法を提案できますか?ここで、出力を非表示のiframeにロードすることについての提案を見てきましたが、これを自分で行う方法がわかりません。

4

1 に答える 1

2

私には基礎となるコードがないので、ほとんど理論を書きます。

ユーザーがファイルのダウンロードを要求する

ファイルを作成しているページをロードすると、プロセスに時間がかかり、その間にユーザーに進行状況バーが表示されます。

このファイルをヘッダー関数(すでに画面に印刷しているため使用できません)を使用してユーザーにスローする代わりに、ファイルを一時ディレクトリに保存します。できれば、ランダムな名前またはタイムスタンプで呼び出してください。

ファイル作成の終わりまでに、次のようなJavaScriptコマンドを画面に出力します。

<script language=”JavaScript”&gt;
self.location=”download.php?file=whatever_you_called_it.xls”;
</script>

次のようなものでExcelダウンロードのヘッダーを設定します。

header('Content-disposition: attachment; filename=your_excel_file.xls');
header('Content-type: application/xls');
readfile('tmp_dir/whatever_you_called_it.xls');

unlink ('tmp_dir/whatever_you_called_it.xls'); 

自分の後で物事をきれいにすることは常に良いことです。何かが削除されない可能性があることに注意してください。したがって、とにかくガベージコレクターを使用することをお勧めします。そして、ファイルをパブリックディレクトリに入れないでください

明らかに、データに機密性がない場合は、JavaScriptをファイルに直接設定するだけで、ブラウザが直接ダウンロードします。しかし、作成されたこれらすべてのファイルをクリーンアップするには、ある種のガベージコレクターが必要になります...面倒です...

于 2012-12-14T00:46:02.803 に答える