APEX がファイルをアップロードする方法を変更したいと考えています。ファイルを BLOB としてデータベース テーブルに入れたくありません。代わりに、apex が実行されているマシンの OS ディレクトリにアクセスしてもらいたいのです。出来ますか?もしそうなら、私は何から始める必要がありますか?
質問する
16860 次
2 に答える
5
ファイル参照アイテムは常にBLOB
列にアップロードされます。指定されたテーブルにない場合は、代替オプションであるwwv_flow_files
( )に移動します。apex_application_files
の処理が終了した後、テーブルを簡単にクリーンアップできるので、これは大したことではありませんBLOB
。
- ファイルを保存する必要がある場所を特定します
- 必要な権限があることを確認してください。(読み書き、...)
- この場所を参照するディレクトリオブジェクトをデータベースに作成します。CREATEDIRECTORYステートメントのドキュメント
- このオブジェクトに必要な許可があることを確認してください(読み取り、書き込み、...)
ファイルにを書き込むプロシージャを作成し
BLOB
ます。この手法の例は、ここ(dba-oracle.com)にあります。要するに、それがすることは次のとおりです。ファイルシステムでファイルを開きます(ディレクトリが必要です。ディレクトリは、前に作成したディレクトリオブジェクトの名前で参照されます
!)-- define output directory l_output := utl_file.fopen('DIR_TEMP', 'filename','wb', 32760);
このサンプルコードでは、作成されたディレクトリが
DIR_TEMP
オブジェクトです- ブロブを取る
- それの一部を読む
- その部分をファイルシステムに書き込みます
- ブロブの終わりに達するまで最後の2つのステップを繰り返します(
BLOB
1回で書き込むのに十分小さい場合を除く) - アップロード先のファイル参照項目を設定する
wwv_flow_files
- ファイルを閉じる(終了する)
- 次に、その手順を変更して、asin
BLOB
パラメーターを取得IN
できます。 - apexで、送信後のplsqlプロセスを作成します。そこでファイル書き込みプロシージャを呼び出して、格納されたBLOBを提供できます。
- そして、アップロードテーブルをクリーンアップします。
頂点プロセスの例:
DECLARE
v_upl_blob BLOB;
BEGIN
SELECT blob_content
INTO v_upl_blob
FROM wwv_flow_files
WHERE name = :Px_FILE_BROWSE_ITEM;
my_file_write_procedure(v_upl_blob);
DELETE FROM wwv_flow_files
WHERE name = :Px_FILE_BROWSE_ITEM;
END;
さらに多くのドキュメントについては、もちろん常にgoogle、ここで使用されるすべてのオブジェクトに関するoracleドキュメント、またはoracleフォーラム(たとえば、OTNapexフォーラムまたはOTNPL / SQLフォーラム)があります。
于 2012-10-05T07:59:06.190 に答える