ファイルをOCIオブジェクト・ストレージにアップロードする画面を作成します。
ファイルをアップロードするダイアログ画面の作成
まず、空のページを作成します。開発中のアプリケーションのホームより、ページの作成を実行します。
ページ・タイプはコンポーネントを選んで、空白ページを作成します。アイコンをクリックするか、選択して次へ進みます。
ページ番号は2(必ず2にしてください。後続のページ・アイテム名などに影響します)、名前はFile Upload、ページ・モードはモーダル・ダイアログを指定して、ページの作成をクリックします。モーダル・ダイアログなので、ブレッドクラム、ナビゲーションはOFFのままにします。
次にタイプがファイル参照...であるページ・アイテムP2_FILEを追加します。記憶タイプはTable APEX_APPLICATION_TEMP_FILESとなっていることを確認します。ラベルはFileとします。
動的アクションの識別/名前は任意の値でかまわないのですが、ここではClick CANCELを指定します。タイミングはデフォルトで(CANCELボタンのコンテキスト・メニューから動的アクションを作成したため)、イベントはクリック、選択タイプはボタン、ボタンはCANCELとなっているはずですが、確認してください。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_request_url varchar2(32767); | |
l_content_length number; | |
l_response clob; | |
upload_failed_exception exception; | |
begin | |
for file in ( | |
select * from apex_application_temp_files | |
where name = :P2_FILE | |
) loop | |
l_request_url := :G_BASE_URL || 'b/' || :P2_BUCKET_NAME | |
|| '/o/' || utl_url.escape(file.filename, false, 'AL32UTF8'); | |
apex_web_service.g_request_headers(1).name := | |
'Content-Type'; | |
apex_web_service.g_request_headers(1).value := | |
file.mime_type; | |
l_response := apex_web_service.make_rest_request( | |
p_url => l_request_url | |
, p_http_method => 'PUT' | |
, p_body_blob => file.blob_content | |
, p_credential_static_id => :G_OCI_WEB_CREDENTIAL | |
); | |
if apex_web_service.g_status_code != 200 then | |
raise upload_failed_exception; | |
end if; | |
end loop; | |
end; |
元にしているブログのコードに、日本語の対応(apex_util.url_encodeの代わりにutl_url.escapeを使用)を追加しています。
続いて同様にプロセスを作成し、識別/名前としてcloseDialog、タイプをダイアログを閉じるを指定します。これにより、プロセスuploadFileの次にcloseDialogが実行され、本ダイアログ・ページが閉じて、ホーム画面に戻ります。
ここまででファイルのアップロードを行うページの作成が完了したので、保存を実行しておきましょう。
通常、ページが送信されたときに実行されるプロセスには、サーバー側の条件にて、どのボタン押下時なのか、条件としてボタンを指定しますが、今回の例ではUPLOADしかページ送信を行うボタンがないため省略しています。
uploadFileで指定したPL/SQLコードの中で、G_BASE_URLとG_OCI_WEB_CREDENTIALという置換文字列を使用しています。これはアプリケーションの静的置換文字列として設定します。アプリケーションのトップ・ページにあるアプリケーション定義の編集をクリックします。
そして、アプリケーション定義の編集画面を開き、置換のセクションに以下の設定を行います。
- G_BASE_URL:
https://objectstorage.REGION.oraclecloud.com/n/NAMESPACE/
(RESTデータ・ソースlist_bucketsのベースURLと同じです) - G_OCI_WEB_CREDENTIAL: OCI_API_ACCESS(Web資格証明の静的識別子です)
ページ番号1のホームを開き、作成したダイアログを開くためのボタンを追加します。
左ペインのレンダリング・ツリーにあるリージョンBucket List上でコンテキスト・メニューを開き、ボタンの作成を実行します。識別のボタン名はUPLOAD、識別のラベルはUpload、レイアウトのボタン位置はNextを指定し、動作のアクションとしてこのアプリケーションのページにリダイレクトを選択します。 ターゲットの指定がリンクが定義されていません、となるので、それをクリックしてリンクを定義します。
ターゲットの指定を行うダイアログが表示されるので、ページを2、アイテムの設定として、名前をP2_BUCKET_NAME、その値を&P1_BUCKET_NAME.として設定します。その後OKをクリックします。
最後に作成したUPLOADボタンに動的アクションを追加します。UPLOADボタンの上でコンテキスト・メニューを開き、動的アクションの作成を実行します。新規に動的アクションとTrue条件で実行されるアクションが作成されます。動的アクションの識別の名前を新規から、任意の値(この例ではClose Dialog)に変更します。タイミングのイベントはダイアログのクローズ、選択タイプはボタン、ボタンがUPLOADとなっていることを確認します。