ヘッダーをスキップ
Oracle® Application Expressアドバンスト・チュートリアル
リリース3.2
B53796-03
  目次へ移動
目次

前
 
次
 

9 アプリケーション内のファイルのアップロードおよびダウンロード方法

Oracle Application Expressアプリケーションには、データベースに格納されているファイルをアップロードおよびダウンロードする機能があります。このチュートリアルでは、ファイルのアップロードおよびダウンロード用のリンクを持つフォームおよびレポートの作成方法、ドキュメントに関する追加属性を格納する表の作成および移入方法、カスタム表にドキュメントをダウンロードするメカニズムの作成方法について説明します。

この項には、次の項目が含まれます。

このトピックに関するその他の例は、次に示すOracle by Examples (OBE)を参照してください。

アプリケーションの作成

最初に、ページ1にアップロード・フォームを含めると想定して、「アプリケーションの作成」ウィザードを使用して新しいアプリケーションを作成します。

「アプリケーションの作成」ウィザードでアプリケーションを作成するには、次のステップを実行します。

  1. 「ワークスペース」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

    「アプリケーション・ビルダー」ホームページが表示されます。

  2. 作成」をクリックします。

  3. アプリケーションの作成」を選択して「次へ」をクリックします。

  4. 「名前」で、次の各項目を指定します。

    1. 「名前」に、Download Appと入力します。

    2. 残りのデフォルトを受け入れて「次へ」をクリックします。

  5. 次のステップで空白ページを追加します。

    1. 「ページ・タイプの選択」で「空白」を選択し、「ページの追加」をクリックします。

      ページ上部の「アプリケーションの作成」リストに、新しいページが表示されます。

    2. 次へ」をクリックします。

  6. 「タブ」で、デフォルトの「1レベルのタブ」を受け入れて「次へ」をクリックします。

  7. 「別のアプリケーションから共有コンポーネントのコピー」で、デフォルトの「いいえ」を受け入れて「次へ」をクリックします。

  8. 「属性」で、「認証スキーム」、「言語」、「ユーザー言語プリファレンスの派生元」にデフォルトを受け入れて、「次へ」をクリックします。

  9. 「ユーザー・インタフェース」で、「テーマ2」を選択して「次へ」をクリックします。

  10. 選択内容を確認して、「作成」をクリックします。

    「アプリケーション」ホームページが表示されます。

アップロード・フォームの作成

アプリケーションを作成した後、次のステップでは、ドキュメントをアップロードするフォームを作成します。次の演習では、HTMLリージョンに、ファイルのアップロード・アイテムとボタンが含まれるフォームを作成します。ボタンによって、ページが送信され、ユーザーが同じページに戻されます。

この項の内容は次のとおりです。

HTMLリージョンの作成

最初に、フォームを保持するコンテナを作成する必要があります。アプリケーション・ビルダーでは、このコンテナはリージョンと呼ばれます。

HTMLリージョンを作成するには、次のステップを実行します。

  1. ページ1」アイコンをクリックします。

    ページ定義が表示されます。

  2. 図9-1に示すように、「リージョン」で、「作成」アイコンをクリックします。

    図9-1 「作成」アイコン

    図9-1の説明が続きます。
    「図9-1 「作成」アイコン」の説明

  3. 「リージョン」で、次のステップを実行します。

    1. 「このページに追加するリージョン・タイプを指定」で、デフォルトの「HTML」を受け入れ、「次へ」をクリックします。

    2. 「作成するHTMLリージョン・コンテナのタイプの選択」で、デフォルトの「HTML」を受け入れ、「次へ」をクリックします。

  4. 「表示属性」で、次のステップを実行します。

    1. 「タイトル」に、Submit Fileと入力します。

    2. 残りのデフォルトを受け入れて「次へ」をクリックします。

  5. 残りのデフォルトを受け入れて「リージョンを作成」をクリックします。

    ページ定義が表示されます。

アップロード・アイテムの作成

次に、テキスト・フィールドまたはアイテムを作成する必要があります。アプリケーション・ビルダーでは、アイテムは、HTMLフォームの一部です。アイテムは、テキスト・フィールド、テキスト領域、パスワード、選択リスト、チェック・ボックスなどを示します。次の演習では、ファイル参照アイテムを作成します。ファイル参照アイテムを作成すると、アップロードしたファイルはwwv_flow_file_objects$と呼ばれる表に格納されます。

ファイルのアップロード・アイテムを作成するには、次のステップを実行します。

  1. ページ1のページ定義の「アイテム」で、「作成」アイコンをクリックします。

  2. 「アイテム・タイプ」で、「ファイル参照」を選択して「次へ」をクリックします。

  3. 「表示位置および名前」で、次のステップを実行します。

    1. 「アイテム名」に、P1_FILE_NAMEと入力します。

    2. 「順序」で、デフォルトを受け入れます。

    3. 「リージョン」で、「Submit File」を選択します。

    4. 次へ」をクリックします。

  4. 残りのデフォルトを受け入れて「次へ」をクリックします。

  5. アイテムの作成」をクリックします。

    ページ定義が表示されます。

ボタンの作成

次に、ファイルを送信するボタンを作成する必要があります。

ボタンを作成するには、次のステップを実行します。

  1. 「ボタン」で、「作成」アイコンをクリックします。

  2. 「ボタン・リージョン」で、「ファイルの送信 (1) 1」を選択して「次へ」をクリックします。

  3. 「ボタン位置」で、「リージョン位置にボタンを作成」を選択して「次へ」をクリックします。

  4. 「ボタン属性」で、次のステップを実行します。

    1. 「ボタン名」に、送信と入力します。

    2. 残りのデフォルトを受け入れます。

    3. 次へ」をクリックします。

  5. 「ボタン・テンプレート」で、デフォルトを受け入れて「次へ」をクリックします。

  6. 「表示プロパティ」で、デフォルトを受け入れて「次へ」をクリックします。

  7. 「ブランチ」で、次のステップを実行します。

    1. 「ページにブランチ」で、「ページ1」を選択します。

      このように選択すると、送信によって別のページにナビゲートされるのではなく、このページ自体がコールされます。

    2. ボタンの作成」をクリックします。

  8. 図9-2に示すように、「ページの実行」アイコンをクリックしてページを実行します。

    図9-2 「ページの実行」アイコン

    図9-2の説明が続きます。
    「図9-2「ページの実行」アイコン」の説明

  9. ユーザー名およびパスワードを入力するように要求されたら、ワークスペースのユーザー名およびパスワードを入力して、「ログイン」をクリックします。詳細は、「アプリケーション認証の概要」を参照してください。

ページを実行すると、図9-3のように表示されます。

図9-3 ファイルの送信フォーム

図9-3の説明が続きます。
「図9-3 ファイルの送信フォーム」の説明

ダウンロード・リンクを持つレポートの作成

ドキュメントをアップロードするフォームを作成したら、次のステップでは、アップロードされたドキュメントへのリンクを含むドキュメント表のレポートを作成します。ファイル参照アイテムを使用すると、アップロードしたファイルはwwv_flow_file_objects$と呼ばれる表に格納されます。すべてのワークスペースは、APEX_APPLICATION_FILESと呼ばれるビューを介した、この表へのアクセス権を所有しています。

この項の内容は次のとおりです。

APEX_APPLICATION_FILESのレポートの作成

APEX_APPLICATION_FILESのレポートを作成するには、次のステップを実行します。

  1. ページ下部の「開発者」ツールバーの「ページの編集1」をクリックします。

    ページ定義が表示されます。

  2. 「リージョン」で、「作成」アイコンをクリックします。

  3. 「リージョン」で、「レポート」を選択して「次へ」をクリックします。

  4. 「レポート実装」で、「SQLレポート」を選択して「次へ」をクリックします。

  5. 「表示属性」で、次のステップを実行します。

    1. 「タイトル」に、Uploaded Filesと入力します。

    2. 残りのデフォルトを受け入れて「次へ」をクリックします。

  6. 「ソース」で、次のSQL問合せを入力します。

    SELECT id,name FROM APEX_APPLICATION_FILES
    
  7. リージョンの作成」をクリックします。

  8. ページを実行します。

図9-4のようなレポートが表示されます。どのファイルをアップロードしたかによって、表示される内容が多少異なる場合があります。

図9-4 「Uploaded Files」レポート

図9-4の説明が続きます。
「図9-4 「Uploaded Files」レポート」の説明

ドキュメントをダウンロードするリンクの追加

次に、各ドキュメントをダウンロードするリンクを設定する必要があります。

ドキュメントをダウンロードするリンクをレポートに設定するには、次のステップを実行します。

  1. 「開発者」ツールバーで「ページの編集1」をクリックします。

  2. 図9-5に示すように、「リージョン」で、「Uploaded Files」の横にある「レポート」をクリックします。

    図9-5 「レポート」リンク

    図9-5の説明が続きます。
    「図9-5 「レポート」リンク」の説明

    「レポート属性」ページが表示されます。「列属性」を編集してID列にリンクを追加できます。

  3. 「列属性」で、ID行内の「編集」アイコンをクリックします。

  4. 「列リンク」までスクロールします。

  5. 「列リンク」で、次のステップを実行します。

    1. 「リンク・テキスト」で、「#ID#」を選択します。

    2. 「ターゲット」で、「URL」を選択します。

    3. 「URL」フィールドに、次のように入力します。

      p?n=#ID#
      

      #ID#は、列のエイリアスがIDである列に含まれる値を渡します。

  6. ページ上部の「変更の適用」をクリックします。

  7. ページを実行します。

    ページを実行すると、図9-6のように表示されます。

    図9-6 ダウンロード・リンク付きの「Uploaded Files」レポート

    図9-6の説明が続きます。
    「図9-6 ダウンロード・リンク付きの「Uploaded Files」レポート」の説明

  8. リンクをテストするには、IDをクリックします。

    「ファイルのダウンロード」ダイアログ・ボックスが表示されます。

  9. 「開発者」ツールバーの「ページの編集1」をクリックして、ページ定義に戻ります。

ドキュメントに関する追加属性の格納

次に、アップロードするドキュメントに関する追加情報を格納する別の表を作成します。この例では、次のステップを実行します。

この項の内容は次のとおりです。

ドキュメント属性を格納する表の作成

最初に、「SQLコマンド」に表を作成します。


関連項目:

『Oracle Database Application Expressユーザーズ・ガイド』の「SQLコマンドの使用」

アップロード済ファイルに関する追加情報を格納する表を作成するには、次のステップを実行します。

  1. 「SQLコマンド」に移動します。

    1. 図9-7に示すように、ページ上部の「ホーム」ブレッドクラム・リンクをクリックします。

      図9-7 ブレッドクラム・メニュー

      図9-7の説明が続きます。
      「図9-7 ブレッドクラム・メニュー」の説明

      「ワークスペース」ホームページが表示されます。

    2. 「ワークスペース」ホームページで「SQLワークショップ」をクリックして、「SQLコマンド」をクリックします。

      「SQLコマンド」ページが表示されます。

  2. 上部のセクションに、次のように入力します。

    CREATE TABLE oehr_file_subject 
       (name     VARCHAR2(4000) primary key, 
        subject  VARCHAR2(4000));
    
  3. 実行」をクリックします。

    Table created」というメッセージが「結果」セクションに表示されます。

  4. ホーム」ブレッドクラム・リンクをクリックします。

    「ワークスペース」ホームページが表示されます。

ドキュメントの件名を取得するアイテムの作成

ドキュメントの件名を取得するアイテムを作成するには、次のステップを実行します。

  1. ページ1のページ定義に移動します。

    1. 「ワークスペース」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

    2. 「アプリケーション・ビルダー」ホームページで、「Download App」をクリックします。

    3. 「アプリケーション」ホームページで、「ページ1」アイコンをクリックします。

    ページ1のページ定義が表示されます。

  2. 「アイテム」で、「作成」アイコンをクリックします。

  3. 「アイテム・タイプ」で、「テキスト」を選択して「次へ」をクリックします。

  4. 「テキスト制御の表示タイプ」で、「テキスト・フィールド」を選択して「次へ」をクリックします。

  5. 「表示位置および名前」で、次のステップを実行します。

    1. 「アイテム名」に、P1_SUBJECTと入力します。

    2. 「順序」で、デフォルトを受け入れます。

    3. 「リージョン」で、「Uploaded Files」を選択します。

    4. 次へ」をクリックします。

  6. 「アイテム属性」で、次のステップを実行します。

    1. 「ラベル」フィールドに、Subjectと入力します。

    2. 残りのデフォルトを受け入れます。

    3. 次へ」をクリックします。

  7. アイテムの作成」をクリックします。

情報を挿入するプロセスの作成

次に、件名情報を新しい表に挿入するプロセスを作成する必要があります。

プロセスを作成するには、次のステップを実行します。

  1. 「ページ・プロセス」の「プロセス」で、「作成」アイコンをクリックします。

  2. 「プロセス・タイプ」で、「PL/SQL」を選択して「次へ」をクリックします。

  3. 「プロセス属性」で、次のステップを実行します。

    1. 「名前」に、Insert file descriptionと入力します。

    2. 「順序」で、デフォルトを受け入れます。

    3. 「ポイント」で、「送信時 - 計算および検証の後」を選択します。

    4. 次へ」をクリックします。

  4. 「PL/SQLページ・プロセスの入力」に、次のように入力します。

    INSERT INTO oehr_file_subject(name, subject) VALUES(:P1_FILE_NAME,:P1_SUBJECT);
    
  5. 次へ」をクリックします。

  6. 「メッセージ」で、次のステップを実行します。

    1. 「成功メッセージ」に、次のように入力します。

      Subject inserted
      
    2. 「失敗メッセージ」に、次のように入力します。

      Error inserting subject
      
    3. 次へ」をクリックします。

  7. 「プロセス条件」で、次のステップを実行します。

    1. 「対象ボタン」で、「送信」を選択します。

    2. 残りのデフォルトを受け入れて「プロセスの作成」をクリックします。

レポート・リージョン内の追加属性の表示

最後に、SQLレポート・リージョンを変更して追加属性表に結合する必要があります。これを行うには、「リージョン定義」ページで「リージョン・ソース」属性を編集します。

「リージョン・ソース」を編集するには、次のステップを実行します。

  1. 「リージョン」で、「Uploaded Files」をクリックします。

    リージョン定義が表示されます。

  2. 「ソース」までスクロールします。

  3. リージョン・ソースを次と置き換えます。

    SELECT w.id,w.name,s.subject  
    FROM APEX_APPLICATION_FILES w,oehr_file_subject s
    WHERE w.name = s.name
    
  4. 変更の適用」をクリックします。

  5. ページを実行します。

  6. 参照」をクリックしてアップロードするファイルを検索し、「送信」をクリックします。

    図9-8に示すように、「Uploaded Files」レポートには、Subject列が表示されるようになります。

    図9-8 Subject列が表示されている「Uploaded Files」レポート

    図9-8の説明が続きます。
    「図9-8 Subject列が表示されている「Uploaded Files」レポート」の説明

  7. 「開発者」ツールバーの「ページの編集1」をクリックして、ページ定義に戻ります。

カスタム表へのドキュメントの格納

アップロード済ドキュメントを自分のスキーマが所有する表に格納する場合があります。たとえば、アップロード済ドキュメントにOracle Text索引を作成する場合、ドキュメントはカスタム表に格納する必要があります。

カスタム表にドキュメントを格納するには、次のステップを実行します。

BLOB列をoehr_file_subject表に追加するには、次のステップを実行します。

  1. 「SQLコマンド」に移動します。

    1. ページ上部の「ホーム」ブレッドクラム・リンクをクリックします。

      「ワークスペース」ホームページが表示されます。

    2. 「ワークスペース」ホームページで「SQLワークショップ」をクリックして、「SQLコマンド」をクリックします。

      「SQLコマンド」ページが表示されます。

  2. 上部のセクションに、次のSQL文を入力します。

    ALTER TABLE oehr_file_subject ADD(id number,blob_content BLOB,mime_type varchar2(4000) );
    
  3. 実行」をクリックします。

    Table Altered」というメッセージが表示されます。

  4. ページ上部の「ホーム」ブレッドクラム・リンクをクリックします。

oehr_file_subject表にドキュメントが挿入されるようにプロセスを変更するには、次のステップを実行します。

  1. 「ワークスペース」ホームページで、「アプリケーション・ビルダー」をクリックします。

  2. Download App」をクリックします。

  3. ページ1」をクリックします。

  4. 「プロセス」で、「Insert file description」リンクをクリックします。

  5. 「ソース」までスクロールします。

  6. 「ソース」で、プロセスを次のコードと置き換えます。

      IF ( :P1_FILE_NAME is not null ) THEN 
         INSERT INTO oehr_file_subject(id,NAME, SUBJECT, BLOB_CONTENT, MIME_TYPE) 
          SELECT ID,:P1_FILE_NAME,:P1_SUBJECT,blob_content,mime_type
                FROM APEX_APPLICATION_FILES
                WHERE name = :P1_FILE_NAME;
       DELETE from APEX_APPLICATION_FILES WHERE name = :P1_FILE_NAME;
      END IF;
    
  7. 変更の適用」をクリックします。

カスタム表からのドキュメントのダウンロード

ドキュメントがカスタム表に格納されるようになると、ドキュメントをダウンロードする方法を指定する必要があります。これを行うには、プロシージャを作成して、そのプロシージャに対する実行権限を擬似ユーザーAPEX_PUBLIC_USERに付与します。

これを実行するには、次の内容を変更する必要があります。

この項の内容は次のとおりです。

ドキュメントをダウンロードするためのプロシージャの作成

oehr_file_subject表からのドキュメントのダウンロード、およびpublicへの実行権限の付与を行うプロシージャを作成するには、次のステップを実行します。

  1. 「SQLコマンド」に移動します。

    1. ページ上部の「ホーム」ブレッドクラム・リンクをクリックします。

      「ワークスペース」ホームページが表示されます。

    2. 「ワークスペース」ホームページで「SQLワークショップ」をクリックして、「SQLコマンド」をクリックします。

      「SQLコマンド」ページが表示されます。

  2. 次のSQL文を入力します。

    CREATE OR REPLACE PROCEDURE download_my_file(p_file in number) AS
            v_mime  VARCHAR2(48);
            v_length  NUMBER;
            v_file_name VARCHAR2(2000);
            Lob_loc  BLOB;
    BEGIN
            SELECT MIME_TYPE, BLOB_CONTENT, name,DBMS_LOB.GETLENGTH(blob_content)
                    INTO v_mime,lob_loc,v_file_name,v_length
                    FROM oehr_file_subject
                    WHERE id = p_file;
                  --
                  -- set up HTTP header
                  --
                        -- use an NVL around the mime type and 
                        -- if it is a null set it to application/octect
                        -- application/octect may launch a download window from windows
                        owa_util.mime_header( nvl(v_mime,'application/octet'), FALSE );
     
                    -- set the size so the browser knows how much to download
                    htp.p('Content-length: ' || v_length);
                    -- the filename will be used by the browser if the users does a save as
                    htp.p('Content-Disposition:  attachment; filename="'||replace(replace(substr(v_file_name,instr(v_file_name,'/')+1),chr(10),null),chr(13),null)|| '"');
                    -- close the headers            
                    owa_util.http_header_close;
                    -- download the BLOB
                    wpg_docload.download_file( Lob_loc );
    end download_my_file;
    /
    
  3. 実行」をクリックします。

    Procedure Created」というメッセージが表示されます。

    次に、別のSQL文を実行します。

  4. SQLワークショップ」ブレッドクラム・リンクをクリックして、「SQLコマンド」をクリックします。

    「SQLコマンド」ページが表示されます。

  5. 上部のセクションで、既存のSQL文を次のように置き換えます。

    GRANT EXECUTE ON download_my_file TO PUBLIC/
    
  6. 実行」をクリックします。

    Statement processed」というメッセージが表示されます。

  7. ページ上部の「ホーム」ブレッドクラム・リンクをクリックして、「ワークスペース」ホームページに戻ります。

「Uploaded Files」リージョンの編集

SQLレポート・リージョンを変更して、APEX_APPLICATION_FILESビューと結合しないようにするには、次のステップを実行します。

  1. ページ1のページ定義に移動します。

    1. 「ワークスペース」ホームページで、「アプリケーション・ビルダー」をクリックします。

    2. 「アプリケーション・ビルダー」ホームページで、「Download App」をクリックします。

    3. 「アプリケーション」ホームページで、「ページ1」をクリックします。

  2. 「リージョン」で、「Uploaded Files」をクリックします。

  3. 「ソース」までスクロールします。

  4. リージョン・ソースを次と置き換えます。

    SELECT s.id,s.name,s.subject FROM oehr_file_subject s
    
  5. 変更の適用」をクリックします。

    ページ定義が表示されます。

新規プロシージャを使用するためのダウンロード・リンクの変更

次に、PL/SQL download_my_fileプロシージャをコールするためのダウンロード・リンクを変更する必要があります。


注意:

Application ExpressをDatabase 11gで使用している場合は、この項の説明に従ってPL/SQLプロシージャをコールするのではなく、「埋込みPL/SQLゲートウェイ用の「ダウンロード」ページの作成」で説明されているステップを実行してください。

ダウンロード・リンクを変更して、新しいダウンロード・プロシージャを使用するには、次のステップを実行します。

  1. 「リージョン」で、「Uploaded Files」の横にある「レポート」をクリックします。

  2. ID行で、「編集」アイコンをクリックします。

  3. 「列リンク」セクションまでスクロールします。

  4. 「URL」フィールドで、既存のURLを次のように置き換えます。

    #OWNER#.download_my_file?p_file=#ID#
    

    このURLの内容は、次のとおりです。

    • #OWNER#は、カレント・アプリケーションを解析しているスキーマです。

    • download_my_fileは、作成した新しいプロシージャです。

    • 列IDの値をパラメータp_fileに渡します。

  5. 変更の適用」をクリックします。

    ページ定義が表示されます。

埋込みPL/SQLゲートウェイ用の「ダウンロード」ページの作成

通常、Oracle Database 11gのApplication Expressに対しては、埋込みPL/SQLゲートウェイが含まれているOracle XML DB HTTP Serverが使用されます。「新規プロシージャを使用するためのダウンロード・リンクの変更」で説明されているように、実行可能なプロシージャのリストに示されていないPL/SQLプロシージャをURLから直接コールすると、エラー・メッセージが表示されます。

この状況を回避するために使用可能な方法は2つあります。1つ目の方法は、PL/SQL download_my_fileプロシージャが含まれるようにPL/SQLファンクションWWV_FLOW_EPG_INCLUDE_MOD_LOCALを変更してから再コンパイルする方法です。2つ目の方法は、次に示すように、PL/SQL download_my_fileプロシージャへのヘッダー前ブランチが含まれているページをアプリケーションに作成する方法です。その後、このページに、ダウンロードするドキュメントのドキュメントIDに対する非表示アイテムを作成します。

2つ目の方法を行うには、次の操作を実行する必要があります。

  • PL/SQLプロシージャdownload_my_fileへのヘッダー前ブランチが含まれているページの作成

  • 新しいページを使用してファイルを表示するためのダウンロード・リンクの変更

PL/SQLプロシージャdownload_my_fileへのヘッダー前ブランチが含まれているページを作成するには、次のステップを実行します。

  1. 「アプリケーション」ホームページで、「ページの作成」をクリックします。

  2. 空白ページ」を選択して「次へ」をクリックします。

  3. 「ページ番号」に2と入力して、「次へ」をクリックします。

  4. 「名前」にDownload Fileと入力して、「次へ」をクリックします。

  5. 「タブ」で、「いいえ」を選択して「次へ」をクリックします。

  6. 終了」をクリックします。

    「成功」ページが表示されます。

  7. ページの編集」アイコンをクリックします。

    ページ2のページ定義が表示されます。

  8. 「リージョン」で、「作成」アイコンをクリックします。

  9. 「リージョン」で、次のステップを実行します。

    1. 「このページに追加するリージョン・タイプを指定」で、デフォルトの「HTML」を受け入れ、「次へ」をクリックします。

    2. 「作成するHTMLリージョン・コンテナのタイプの選択」で、デフォルトの「HTML」を受け入れ、「次へ」をクリックします。

  10. 「表示属性」で、次の各項目を指定します。

    1. 「タイトル」に、Display Documentと入力します。

    2. 残りのデフォルト値を受け入れます。

    3. 次へ」をクリックします。

  11. リージョンの作成」をクリックします。

    ページ2のページ定義が表示されます。ページ上部に「リージョンが作成されました。」という確認メッセージが表示されます。

  12. ページ2のページ定義の「アイテム」で、「作成」アイコンをクリックします。

  13. 「アイテム・タイプ」で、「非表示」を選択して「次へ」をクリックします。

  14. 「非表示のアイテム・タイプ」で、「非表示で保護」を選択して「次へ」をクリックします。

  15. 「アイテム名」で、P2_DOC_IDと入力して「次へ」をクリックします。

  16. 「ソース」で、すべてのデフォルトを受け入れて「アイテムの作成」をクリックします。

    ページ2のページ定義が表示されます。

  17. 「ブランチ」で、「作成」アイコンをクリックします。

  18. 「ブランチ・ポイント」リストで、「ロード時: ヘッダーの前」を選択します。

  19. 「ブランチ・タイプ」で、「PL/SQLプロシージャにブランチ」を選択して「次へ」をクリックします。

  20. コールするPL/SQLプロシージャを指定するテキスト・ボックスに、download_my_file(:P2_DOC_ID)と入力します。

  21. 「ブランチ条件」で、デフォルト値を受け入れて「ブランチの作成」をクリックします。

    ページ2のページ定義が表示されます。

「ダウンロード表示」ページに表示するためのダウンロード・リンクの変更

  1. 「ページ1」アイコンをクリックします。

    ページ1のページ定義が表示されます。

  2. 「リージョン」で、「Uploaded Files」の横にある「レポート」をクリックします。

    「レポート属性」ページが表示されます。

  3. 「列属性」で、ID行内の「編集」アイコンをクリックします。

  4. 「列リンク」までスクロールして、次のステップを実行します。

  5. 「列リンク」で、次のステップを実行します。

    1. 「ターゲット」で、「このアプリケーションのページ」を選択します。

    2. 「ページ」に、2と入力します。

    3. 「アイテム1の名前」に、P2_DOC_IDと入力します。

    4. 「アイテム1の値」に、#ID#と入力します。

  6. 変更の適用」をクリックします。

  7. アプリケーションを実行します。

考慮する必要があるセキュリティ上の問題

このチュートリアルで構築するアプリケーションでは、プロシージャdownload_my_fileを起動するダウンロード・リンクが提供されます。この方法には、注意の必要があるセキュリティ上の問題があります。

自分のプロシージャを、他のユーザーが、提供されているリンクをクリックするか、またはWebブラウザの「アドレス」(または「ロケーション」)フィールドに同様のURLを入力して起動することができます。好奇心旺盛なユーザーまたは悪意のあるユーザーは、任意のファイルIDをp_file引数として渡してdownload_my_fileプロシージャを試行する可能性があることに注意してください。ハッカーは、合法または非合法の手段を用いて表に存在するファイルIDを特定できます。さらに、ハッカーは、IDが表内のファイルに一致してファイルがプロシージャによってダウンロードされるまで、機械化された攻撃で連続してIDを送信できます。

不正アクセスからデータを保護するための対策は、次の要因によって異なります。

アプリケーションを保護するために使用可能な方法の1つとして、プロシージャ内からOracle Application ExpressのいずれかのセキュリティAPIをコールしてユーザーがすでに認証されていることを確認する方法があります。たとえば、コードのブロックを、最初に実行されるようにプロシージャに含めることができます。次に例を示します。

-- Assuming your application's numeric ID is 100, set g_flow_id to
--     that value, otherwise change the value as required. 
--
APEX_APPLICATION.G_FLOW_ID := 100;

IF NOT wwv_flow_custom_auth_std.is_session_valid then
    -- 
    -- 
    -- display this message or a custom message. 
    -- 
htp.p('Unauthorized access - file will not be retrieved.'); 
    -- 
    -- You can do whatever else you need to here to log the
    --     unauthorized access attempt, get the requestor's
    --     IP address, send email, etc. 
    -- 
    RETURN;
END IF;