ここでは、アプリケーションでファイルのダウンロードを簡単に管理する方法について説明します。
次のように、ユーザーイベントでファイルの実行または保存のどちらを行うかを確認するメッセージを表示するとします:
この場合、次の操作が必要です。
HTTP 応答のヘッダーにデータを追加するには、HTTP プロトコルを使用して GeneXus オブジェクトを呼び出せるようにしておく必要があります。HTTP プロトコルを使用してプロシージャーを呼び出せるようにするには、上記の設定が必要です。
ファイルをダウンロードする場合の例を以下に示します。
/*
コンテキスト (WebSession、データベースなど) から &contenttype、&filename、および &filepath を取得。
セキュリティ上の理由 (パストラバーサル) から、parm 経由で受信してはいけない。
*/
&HttpResponse.AddHeader(!"Content-Type", &contenttype) //&contenttype は 'application/x-zip-compressed'
&HttpResponse.AddHeader(!"Content-Disposition", !"attachment;filename="+&filename) //&filename は 'download.zip'
&HttpResponse.AddFile(&filepath) //&filepath は 'C:\temp\download.zip'
&HttpResponse.AddHeader(!"Pragma", !"public")
&HttpResponse.AddHeader(!"Cache-Control", !"max-age=0")
Event 'Download'
ProcedureHTTPDownload.Link()
EndEvent
アプリケーションに
&filepath へのフルアクセス権があることを確認します。アプリケーションが
&filepath にアクセスできない場合、処理に失敗します (アクセス拒否の例外がスローされます)。
[ Call protocol ] プロパティ