Oracle apex 从集合中下载 blob 文件
Posted
技术标签:
【中文标题】Oracle apex 从集合中下载 blob 文件【英文标题】:Oracle apex download blob file from collection 【发布时间】:2020-08-04 16:37:27 【问题描述】:我正在尝试从集合中下载文件。 我浏览了很多论坛,包括这里:APEX: Download BLOB from temporary table
但它不起作用,我不知道为什么。不会引发错误。 按下按钮时我的 PL/SQL 代码是:
DECLARE
v_mime VARCHAR2(255);
v_length NUMBER;
v_file_name VARCHAR2(255);
Lob_loc BLOB;
BEGIN
SELECT c001, c004, blob001
INTO v_file_name, v_mime, Lob_loc
FROM apex_collections
WHERE collection_name = 'COLLECTION_DOCS' AND seq_id = :P113_SEQ;
select sys.dbms_lob.getlength(Lob_loc) into v_length from dual;
/* This raise shows me the correct values taken form the collection table
raise_application_error (-20001,'
name:' || v_file_name || '
mime: ' || v_mime || '
length: ' || v_length || '
');
*/
sys.htp.init;
sys.owa_util.mime_header(v_mime, FALSE);
sys.htp.p('Content-length: ' || v_length);
sys.htp.p('Content-Disposition: attachment; filename="' || v_file_name || '"' );
sys.owa_util.http_header_close;
sys.wpg_docload.download_file( Lob_loc );
apex_application.stop_apex_engine;
END;
请注意,当我按下按钮时,注释部分中的值(启用时)会显示正确的文件名、mimetype 和大小。这意味着从集合中检索工作正常。
感谢您的帮助。
【问题讨论】:
我会在内容处置调用之后尝试使用sys.htp.p('Cache-Control: max-age=3600');
。
仍然没有下载:(
你把这段代码放在哪里了?
@KoenLostrie 我添加了下载按钮的图片,以及激活 PL/SQL 代码的动态操作。它都在“模式对话框”页面中,接收集合的“seq id”
【参考方案1】:
您发布的代码是针对服务器的新 http 请求。如果您将该代码放入动态操作中,它将在当前数据库会话/呈现的顶点页面中执行,并且没有任何反应。这是预期的行为。
解决此问题的一种方法是使用页面项 PNN_SEQ 创建一个单独的下载页面。将上面的代码放在这个新页面的前页眉进程中。您所指的原始堆栈溢出帖子也提到了这一点:这个 PL/SQL 块被称为“在标题之前加载”
在原始页面的下载按钮上,将重定向到 url 并传递 P113_SEQ 的值。这将向您需要的 mimetype 的服务器发出一个新请求。
您也可以在此处描述的申请流程中执行此操作:https://joelkallman.blogspot.com/2014/03/yet-another-post-how-to-link-to.html
【讨论】:
非常感谢它有效! (我使用了单独的页面)。只有一件事,您写了“将重定向到 url”,我猜您的意思是“重定向到此应用程序中的页面” 只是一个更新:在过去的一个月里,发生了一些变化,可能与浏览器更新或什么有关……但现在下载窗口不会关闭,它只是在思考和思考(下载仍在发生)。所以我不得不改变这个方法 - >我将文件从集合中复制到顶点 BLOB 项目中,然后通过模拟下载点击从那里下载。如果有人修复了早期的错误,我会很高兴听到以上是关于Oracle apex 从集合中下载 blob 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用卡片区域下载 BLOB 文件 - Oracle Apex v21.1
Oracle ApEx Shuttle 和 Ajax On Demand 流程
从基于 PL/SQL 函数体返回 SQL 查询的 Oracle APEX 5 经典报告下载到 Excel 选项,