2022年12月6日火曜日

簡単なファイル管理アプリケーションの作成(2) - 直リンクによるダウンロード

ファイルのIDをURLの引数に与え、指定したファイルを直接ダウンロードできるようにします。

直リンクの実装の詳細、特にページの保護に関する説明については記事「特定のページへの直リンクによるアクセス」を参照してください。ページ・プロパティのディープ・リンクやページ保護の設定の意味について説明をしています。

本記事では、主に実装の手順について紹介します。

以下のような機能を、本記事では実装します。ダウンロードURLを電子メールなどに含めることにより、ファイルを共有することができます。



アプリケーション・アイテムの作成



ダウンロードの対象とするファイルを、URLの引数IDによって特定できるようにします。IDには表SFM_CONTENTSの列IDの値(つまり主キーの値)を指定します。

共有コンポーネントアプリケーション・アイテムを開きます。


作成済みのアプリケーション・アイテムが一覧されます。

作成を実行します。


作成するアプリケーション・アイテムは名前IDとし、セッション・ステート保護制限なしに設定します。設定した後、アプリケーション・アイテムの作成を実行します。


直リンクとなるURLを、セッションの開始時にアプリケーション・アイテムとして設定します。アプリケーションがインストールされているワークスペース名やアプリケーション別名によってURLは変わります。

アプリケーション・アイテムの名前G_DOWNLOAD_URLとします。セキュリティセッション・ステート保護制限付き - ブラウザから設定不可を選択し(これがデフォルトです)、アプリケーションのユーザーによる値の設定を禁止します。


アプリケーション・アイテムIDおよびG_DOWNLOAD_URLが作成されます。


アプリケーション・アイテムG_DOWNLOAD_URLに値を設定します。

共有コンポーネントアプリケーションの計算を開きます。


作成済みのアプリケーションの計算が一覧されます。作成をクリックします。


計算アイテムとしてG_DOWNLOAD_URLを選択します。頻度計算ポイント新規インスタンス(新規セッション)開始時です。

計算計算タイプファンクション本体を選択し、計算として以下のPL/SQLコードを記述します。


計算の作成をクリックします。


アプリケーションの計算が作成されました。

セッションの開始時にアプリケーション・アイテムG_DOWNLOAD_URLに直接ダウンロードするためのURLが設定されます。


ダウンロード機能の実装



プログラムの中からファイルのダウンロードを呼び出すために、APEX_UTIL.GET_BLOB_FILE_SRCを使用します。このAPIの引数p_item_nameとして、ダウンロードするファイルが保存されているBLOB列が割り当てられているページ・アイテムを指定します。このようなページ・アイテムは通常、フォームに含まれています。

今回のアプリケーションでは表SFM_CONTENTSのフォームが、ページ番号Sfm Contentとして作成されています。フォームに含まれるページ・アイテムP3_CONTENTp_item_nameに与えることができます。

ページ・アイテムP3_CONTENTを使って、ダウンロード機能を実装します。アプリケーションにp_item_nameとして割り当て可能なページ・アイテムが含まれない場合は、フォームを実装したページを新たに作成する必要があります。

ダウンロード機能を実装するページを作成します。

ページの作成を実行します。


空白ページを選択します。


ページ定義名前downloadとします。ダウンロードURLのターゲットはこのページ名になります。ページ・モード標準ナビゲーションブレッドクラムの使用ナビゲーションの使用はともにOFFです。この空白のページがユーザーに表示されることはありません。

ページの作成を実行します。


ページが作成されます。

ページ・プロパティのセキュリティに含まれるディープ・リンク有効にします。また、ページ・アクセス保護制限なしにします。


レンダリング前ヘッダー前にプロセスを作成します。

識別名前ダウンロードタイプコードの実行を選択します。PL/SQLコードとして以下を記述します。


サーバー側の条件タイプアイテムはNULLではないを選択し、アイテムIDを指定します。URLの引数としてIDがなければプロセスは実行しません。


以上で実装は完了です。

直接ファイルをダウンロードするURLを確認します。

対話モード・レポートのソースに以下の列DOWNLOAD_URLを追加します。

:G_DOWNLOAD_URL || id download_url

ページ番号2の対話モード・レポートのソースSQL問合せを以下のSELECT文に置き換えます。



アプリケーションを実行し、対話モード・レポートに表示する列にDownload Urlを追加します。


表示されたURLを直接アクセスすると、ユーザー認証が要求されます。これはページdownload認証が必要なページとして設定されているためです。正しいユーザー名とパスワードでサインインを行うとファイルのダウンロードが開始します。ページのディープ・リンク有効でなければ、サインインの後は必ずホーム・ページが開くように制限されるため、ページdownloadが開くことはありません。また、ページ・アクセス保護制限なしであるため、引数idの指定が許されています。

続く