オブジェクトのダウンロードは独立したページに実装します。
ページの作成を実行します。
空白ページを選択します。
名前をdownload、ページ・モードは標準を選択します。ナビゲーションのブラッドクラムの使用、ナビゲーションの使用はともにOFFとします。
ページの作成をクリックします。
作成されたページに、ダウンロードするオブジェクトを決める引数となるページ・アイテムを作成します。
ページ・アイテムP6_BUCKET_NAMEを作成します。タイプはテキスト・フィールド、ラベルはBucket Nameとしています。
実際にはdownloadのページは表示されないため、タイプは非表示や表示のみでも構いません。
ヘッダーの前の上でコンテキスト・メニューを表示させ、プロセスの作成を実行します。
作成されたプロセスの識別の名前をdownloadとし、ソースのPL/SQLコードに以下を記述します。
DBMS_CLOUD_OCI_DBS_OBJECT_STORAGE.GET_OBJECTを呼び出してBLOBとしてAPEX(データベース)で受け取ったデータを、WPG_DOCLOAD.DOWNLOAD_FILEプロシージャを呼び出すことによってAPEXからブラウザにダウンロードしています。
一旦オブジェクト全体をデータベースで保持する形になるため、巨大なファイルの扱いには注意が必要と思われます。きちんと調べていませんが、多分、最低でもファイルのサイズ分だけPGAが消費されるのではないでしょうか。
最後にオブジェクト一覧のレポートから、オブジェクト名をクリックするとダウンロードが開始するようにリンクを設定します。
オブジェクト一覧のページをページ・デザイナで開きます。対話モード・レポートに含まれる列NAMEを選択し、タイプをリンクに変更します。ターゲットとして先程作成したダウンロードを行うページ、リンク・テキストは#NAME#とします。
ターゲットとして、タイプはこのアプリケーションのページ、ページは6(ダウンロードのページ)、アイテムの設定として、P6_BUCKET_NAMEへはカレント・ページより&P4_BUCKET_NAME.、P6_OBJECT_NAMEには列#NAME#を渡します。OKをクリックします。
以上でダウンロードの機能も実装完了です。オブジェクト一覧画面を表示し、動作を確認します。
列Nameのリンクをクリックすることにより、オブジェクト・ストレージからダウンロードができます。
以上でPL/SQL SDKを使ってオブジェクト・ストレージを操作するアプリケーションは完成です。オブジェクト・ストレージの操作に直接は関係しない設定は、記事が長くなるため除外しています。ですので、アプリケーションを実用レベルにあげるには、それらも調整する必要があるでしょう。
今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/oci-object-storage-manager.zip
Oracle APEXのアプリケーション開発の参考になれば幸いです。
完