手元にあるファイルのアップロード、一覧およびダウンロードを行うAPEXアプリケーションを作成します。過去に公開していた記事を、APEX 22.2で作業をやり直した上で書き直しました。
最初に、以下の動作をするアプリケーションを作成します。
ファイルを保存する表の作成
クリックSQLの以下のモデルより、表SFM_CONTENTSを作成します。
# prefix: sfm
# pk: guid
contents
title vc80 /nn
abstract vc800
content file
contentというのがファイルを保存する列の指定になります。クイックSQLではfileとして、ファイルを保存する簡易タイプを指定できます。この指定から、content_filename, content_mimetype, content_charset, content_lastupdといった列が自動的に追加されます。これらはOracle APEXのページ・アイテムのタイプとしてファイル参照...を選択した際に、ページ・アイテムのプロパティに指定する値になります。PKとしてGUIDを生成するように定義しているため、行の挿入時に主キー列IDとしてGUID(SYS_GUID()の値)が自動的に設定されます。IDを連番にすると、IDを推測してダウンロードを試みることが容易になるため、GUIDを選んでいます。
表を作成します。
SQLワークショップよりユーティリティのクイックSQLを開きます。
左ペインにクイックSQLのモデルを記述し、SQLの生成をクリックします。続けて、SQLスクリプトの保存をクリックし、ファイルとして一旦保存します。
その後、レビューおよび実行をクリックします。
確認画面が開きます。即時実行をクリックします。
DDLの実行が成功している(つまり正常に表SFM_CONTENTSが作成されている)ことを確認し、アプリケーションの作成を実行します。
アプリケーションの作成
クイックSQLによる表の作成から続けて、アプリケーションの作成を行います。
アプリケーションの作成をクリックします。
クイックSQLにより作成された表SFM_CONTENTSをソースとするレポートとフォームのページを、アプリケーション作成ウィザードに設定すると案内されます。
そのまま、アプリケーションの作成をクリックします。
アプリケーション作成ウィザードが開きます。
表SFM_CONTENSをソースとしたレポートとフォームのページが含まれています。
アプリケーションの名前として簡易ファイル管理を設定します。それ以外はデフォルトから変更しません。
アプリケーションの作成を実行します。
アプリケーションが出来上がります。
作成されたアプリケーションの調整
表SFM_CONTENTSの列CONTENTの型はBLOBです。レポートのBLOB列にて設定が必須でないBLOB属性は、手作業で設定する必要があります。
ページ・デザイナにてページ番号2のContentsのページを開き、レポートSfm Contentsの列CONTENTを選択します。
列CONTENTのBLOB属性のMIMEタイプ列としてCONTENT_MIMETYPE、ファイル名列としてCONTENT_FILENAME、最終更新列としてCONTENT_LASTUPD、文字セット列としてCONTENT_CHARSETを指定します。
これらの列はクイックSQLにて、列contentの型としてfileを指定したことにより、自動的に作成されています。
外観のテキストのダウンロードとして#CONTENT_FILENAME#を指定します。
ページ・デザイナにてページ番号2のContentsのページを開き、レポートSfm Contentsの列CONTENTを選択します。
列CONTENTのBLOB属性のMIMEタイプ列としてCONTENT_MIMETYPE、ファイル名列としてCONTENT_FILENAME、最終更新列としてCONTENT_LASTUPD、文字セット列としてCONTENT_CHARSETを指定します。
これらの列はクイックSQLにて、列contentの型としてfileを指定したことにより、自動的に作成されています。
外観のテキストのダウンロードとして#CONTENT_FILENAME#を指定します。
APEXの22.1以降のバージョンでは、BLOB列はdbms_lob.getlengthを呼び出した結果に置き換わっています。そのため、ウィザードが生成したSELECT文を手作業で修正する必要が無くなりました。