我已关注this post并在数据库中创建了一个过程。然后我在页面中创建了一个我要查看PDF的新区域。在源头我把它:
<embed src="#OWNER#.download_my_file?p_file=21" width="500" height="375">
21是我在程序中指定的表中的一个ID。这只是暂时的固定值。
当我查看该页面时,我遇到了一个错误:
(拒绝访问名为:INGTOCBADB.download_my_file的程序)
我该如何解决这个问题?
答案 0 :(得分:3)
您需要将您的程序添加到&#34;白名单&#34;在APEX_xxxxxx模式中的函数WWV_FLOW_EPG_INCLUDE_MOD_LOCAL中调用允许的过程:
create or replace Function wwv_flow_epg_include_mod_local(procedure_name IN VARCHAR2)
return boolean
is
BEGIN
IF upper(procedure_name) IN (
'DOWNLOAD_MY_FILE',
... other procedures already listed
)
THEN
return TRUE;
ELSE
return FALSE;
END IF;
end wwv_flow_epg_include_mod_local;
答案 1 :(得分:0)
另一种方法是使用申请流程。我更喜欢这种方式,而不是启用对db过程的公共访问。
您可以在下面的博客中找到如何链接和部分复制的内容。该博客由Oracle软件开发总监兼Apex经理Joel Kallman撰写。这个人值得一听。
http://joelkallman.blogspot.be/2014/03/yet-another-post-how-to-link-to.html
我复制了大部分博客并更新了指向工作文档链接的链接。
首先,不的方式是通过调用的PL / SQL过程 直接来自URL。我看到这个“解决方案”通常记录在 互联网,一般来说,不应该遵循。默认 Oracle Application Express的配置有一个白名单条目 点,可从URL调用。出于安全考虑,你绝对是 想要保留这个限制而不是放松它。这是 指定为PlsqlRequestValidationFunction for mod_plsql和 {REST}数据服务security.disableDefaultExclusionList (nee APEX听众)有了这个默认的安全措施,您就可以了 将无法从URL调用架构中的过程。 好!
从APEX应用程序中的URL返回图像的最简单方法 可以通过RESTful服务或按需流程进行。这个 博客文章将涵盖按需流程。这肯定更容易 通过RESTful服务实现,如果你可以通过RESTful来实现 打电话,这将永远快得多 - 克里斯有一个great example如何 去做这个。但是,通过按需实现这一点的一个好处 过程是它也会受到任何条件或约束 适用于您的APEX申请的授权方案 (即,如果您的应用程序需要身份验证和 授权,除非他们是,否则某人将无法访问该URL 同样通过APEX申请认证并获得完全授权。
对于Process Text,请输入以下代码:
begin
for c1 in (select *
from my_image_table
where id = :FILE_ID) loop
--
sys.htp.init;
sys.owa_util.mime_header( c1.mime_type, FALSE );
sys.htp.p('Content-length: ' || sys.dbms_lob.getlength( c1.blob_content));
sys.htp.p('Content-Disposition: attachment; filename="' || c1.filename || '"' );
sys.htp.p('Cache-Control: max-age=3600'); -- tell the browser to cache for one hour, adjust as necessary
sys.owa_util.http_header_close;
sys.wpg_docload.download_file( c1.blob_content );
apex_application.stop_apex_engine;
end loop;
end;
然后,您需要做的就是在应用程序中构建一个调用此应用程序进程的URL,如Application Express Application Builder Users' Guide中所述。您可以使用APEX_UTIL.PREPARE_URL
手动构建URL,或在报告列的声明属性中指定链接。请务必指定APPLICATION_PROCESS=GETIMAGE
的请求(或您的申请流程名称)。该URL看起来像:
f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=GETIMAGE:::FILE_ID:<some_valid_id>
这就是它的全部内容。
一些结束评论:
再一次 - 学分归Joel Kallman所有。
答案 2 :(得分:0)
对我来说有用的是在default.xml文件中添加条目,以便ORDS知道白名单是什么
EG
<entry key="security.inclusionList">wwv_flow*,f,n,p,q,cust,apex,ADMIN.*</entry>