6

APEX がファイルをアップロードする方法を変更したいと考えています。ファイルを BLOB としてデータベース テーブルに入れたくありません。代わりに、apex が実行されているマシンの OS ディレクトリにアクセスしてもらいたいのです。出来ますか?もしそうなら、私は何から始める必要がありますか?

4

2 に答える 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つのステップを繰り返します(BLOB1回で書き込むのに十分小さい場合を除く)
    • アップロード先のファイル参照項目を設定するwwv_flow_files
    • ファイルを閉じる(終了する)
  • 次に、その手順を変更して、asinBLOBパラメーターを取得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 に答える