oracle apex文件上传

Kev*_*vin 6 oracle-apex

我想改变APEX上传文件的方式.我不希望文件作为BLOB进入数据库表.相反,我希望我们能够在运行apex的机器上找到OS目录.可能吗?如果是这样,我需要从什么开始?

Tom*_*Tom 5

文件浏览项将始终上载到BLOB列.如果不在指定的表中,它将转到wwv_flow_files(apex_application_files),这是备用选项.这应该不是一个破坏者,因为你可以在完成处理后轻松清理桌面BLOB.

  • 确定文件最终需要的位置
  • 确保您拥有必要的权限!(读,写,......)
  • 在数据库中创建一个引用此位置的目录对象:CREATE DIRECTORY语句文档
  • 确保你对这个对象有必要的资助(读,写......)
  • 创建一个将BLOB文件写入的过程.这里有一个例子(dba-oracle.com).简而言之,它将做的是:

    • 在文件系统上打开一个文件(需要一个目录,一个目录由你
      之前创建的目录对象的名称引用!)

      -- define output directory
      l_output := utl_file.fopen('DIR_TEMP', 'filename','wb', 32760);
      
      Run Code Online (Sandbox Code Playgroud)

      在此示例代码中,创建的目录是DIR_TEMP对象

    • 拿一滴
    • 读了一块
    • 将那篇文章写入文件系统
    • 重复最后两步,直到达到blob的结尾(除非BLOB它足够小,可以一次写入)
    • 设置要上传到的文件浏览项目 wwv_flow_files
    • 关闭文件(完成它)
  • 然后,您可以更改该过程以获取BLOBas 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;
Run Code Online (Sandbox Code Playgroud)

对于更多文档,当然总是google,这里使用的所有对象的oracle文档,甚至是oracle论坛(例如OTN apex论坛OTN PL/SQL论坛)