【发布时间】:2012-09-25 13:51:39
【问题描述】:
我想更改 APEX 上传文件的方式。我不希望文件作为 BLOB 进入数据库表。相反,我希望他们能够直接进入运行 apex 的机器上的 OS 目录。可能吗?如果是这样,我需要从什么开始?
【问题讨论】:
标签: oracle-apex
我想更改 APEX 上传文件的方式。我不希望文件作为 BLOB 进入数据库表。相反,我希望他们能够直接进入运行 apex 的机器上的 OS 目录。可能吗?如果是这样,我需要从什么开始?
【问题讨论】:
标签: oracle-apex
declare
v_length number;
v_id number;
begin
select doc_size
into v_length
from wwv_flow_files
where name = :P105_PIC;
if v_length > 20000 then
delete from wwv_flow_files where name = :P105_PIC;
commit;
apex_error.add_error (
p_message => 'Cannot upload pictures bigger than 20kB!',
p_display_location => apex_error.c_inline_in_notification );
end if;
exception
when others then
apex_error.add_error (
p_message => 'Cannot upload pictures!',
p_display_location => apex_error.c_inline_in_notification );
end;
【讨论】:
文件浏览项将始终上传到BLOB 列。如果不在指定的表中,它将转到 wwv_flow_files (apex_application_files),这是备用选项。不过,这不应该成为破坏交易的因素,因为您可以在处理完 BLOB 后轻松清理表格。
创建一个将BLOB 写入文件的过程。这方面的一个例子
技术是here (dba-oracle.com)。简而言之,那会做什么
是:
在文件系统上打开一个文件(目录是必需的,目录由你的目录对象的名称引用
之前创建的!)
-- define output directory
l_output := utl_file.fopen('DIR_TEMP', 'filename','wb', 32760);
在此示例代码中,创建的目录是DIR_TEMP 对象
BLOB 小到可以一次性写入)wwv_flow_files
BLOB,如IN
参数。示例顶点过程:
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 论坛(例如OTN apex forums 或OTN PL/SQL forums)
【讨论】: