You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex v21.1 如何通过卡片区域实现BLOB文件下载功能

BLOB文件卡片点击下载实现方案

前置修正说明

你现有建表语句中blob_document字段定义为VARCHAR2(512),无法存储二进制文件内容,建议先修改为BLOB类型,修改语句如下:

ALTER TABLE tb_document MODIFY blob_document BLOB;

修正后的完整建表语句参考:

CREATE TABLE tb_document
(
    pk_document NUMBER,
    nom_document VARCHAR2(4000),
    mimetype_document VARCHAR2(512),
    charset_document VARCHAR2(512),
    blob_document BLOB,
    comment_document VARCHAR2(4000),
    tags_document VARCHAR2(4000),
    creation_document TIMESTAMP(6),
    PRIMARY KEY(pk_document)
);

下载URL配置方法

方案1:使用APEX原生工具生成链接(推荐)

直接在Cards区域的数据源SQL中新增下载链接计算列,生成的链接和原生列表报告的下载逻辑完全一致,示例SQL如下:

SELECT 
    pk_document,
    nom_document,
    comment_document,
    tags_document,
    creation_document,
    -- 生成标准BLOB下载链接
    APEX_UTIL.GET_BLOB_FILE_SRC(
        p_application_id => :APP_ID,
        p_blob_column_name => 'BLOB_DOCUMENT',
        p_pk1_value => pk_document,
        p_pk2_value => NULL,
        p_blob_table_name => 'TB_DOCUMENT',
        p_content_type => mimetype_document,
        p_filename => nom_document,
        p_charset => charset_document
    ) AS download_url
FROM tb_document

方案2:自定义应用进程构造链接

如果需要自定义下载控制逻辑,可以手动构造URL,配套应用级Ajax进程实现:

  1. 新建应用级Ajax进程,命名为download_blob,进程代码如下:
DECLARE
    v_blob BLOB;
    v_mime VARCHAR2(512);
    v_filename VARCHAR2(4000);
    v_charset VARCHAR2(512);
BEGIN
    SELECT blob_document, mimetype_document, nom_document, charset_document
    INTO v_blob, v_mime, v_filename, v_charset
    FROM tb_document
    WHERE pk_document = APEX_UTIL.GET_NUMERIC_SESSION_STATE('P_PK_DOCUMENT');

    sys.HTP.init;
    sys.OWA_UTIL.mime_header(v_mime, FALSE, v_charset);
    sys.HTP.p('Content-Length: ' || DBMS_LOB.GETLENGTH(v_blob));
    sys.HTP.p('Content-Disposition: attachment; filename="' || v_filename || '"');
    sys.OWA_UTIL.http_header_close;

    sys.WPG_DOCLOAD.download_file(v_blob);
    APEX_APPLICATION.STOP_APEX_ENGINE;
END;
  1. 数据源中构造下载URL:
SELECT 
    pk_document,
    nom_document,
    -- 手动构造下载URL
    'f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=download_blob:::::P_PK_DOCUMENT:'||pk_document AS download_url
FROM tb_document

卡片点击动作配置

  • 进入Cards区域属性面板,找到「行为」→「链接」设置
  • 链接类型选择「重定向到URL」,URL框填写#DOWNLOAD_URL#(和数据源中的下载链接列名对应即可)
  • 若需要直接触发下载不打开新标签页,可在「HTML属性」栏输入download
  • 保存页面后运行,点击卡片即可触发对应文件的下载

内容的提问来源于stack exchange,提问作者ThomasT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:24:03