【问题标题】:Download a BLOB file using the Cards Region - Oracle Apex v21.1使用卡片区域下载 BLOB 文件 - Oracle Apex v21.1
【发布时间】:2023-03-17 10:17:01
【问题描述】:

我正在尝试创建某种“档案”页面,用户可以在其中下载前几年的报告。为此,我首先尝试创建一个表来保存我的文档(包含 MIMETYPE、BLOB、FILENAME、CHARSET 列等...)。

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

上传一些文件后,我有这种类型的报告:

点击下载图标,我就可以成功下载文件了。

但是,我不喜欢报告的外观。然后我尝试创建一个卡片区域,它将显示我的文件,这就是我所做的,我更喜欢它:

问题是我没有 BLOB 下载链接了,所以我尝试向卡片区域添加一个动作,单击它会重定向到特定 URL

这引出了我的问题,与 BLOB 下载链接 执行相同操作的 URL 是什么,以及如何下载我在卡上单击的特定文件?

不要犹豫,询问更多细节,在此先感谢,

托马斯

【问题讨论】:

    标签: oracle file download blob oracle-apex


    【解决方案1】:

    我使用此处建议的解决方案进行 blob 下载:"Download Blob" using Interactive Grid

    我的(正常)链接正在重定向到第 9000 页(请参阅上述链接中的第 3 点),并且将我的主行 ID 提供给 P9000_FILE_ID 项目。

    它的工作量很大,但我可以推荐这个解决方案,因为它描述得很好并且工作正常。 虽然我没有尝试使用卡片,但我使用交互式网格来触发它,但只要您拥有使用带有链接的解决方案的主 ID,我认为卡片也应该适用。

    希望以上链接有所帮助。

    【讨论】:

    • 您好,doomi,感谢您抽出宝贵时间回答!我找到了另一个解决方案,我会在下面描述它以防万一有人需要它,无论如何谢谢!
    【解决方案2】:

    我有这个结果:

    这给了我这些下载:

    我是这样做的:

    1.在 SQL 命令中创建此过程

    CREATE OR REPLACE PROCEDURE get_file (p_file_id  IN VARCHAR2) IS --The parameter will be the ID of the file in my document table
      l_blob_content  tb_document.blob_document%TYPE;       --The BLOB FILE
      l_mime_type     tb_document.mimetype_document%TYPE;   --The MIMETYPE of the File
      l_nom_document  tb_document.nom_document%TYPE;        --The name of the file
    BEGIN
      SELECT blob_document,
             mimetype_document,
             nom_document
      INTO   l_blob_content,
             l_mime_type,
             l_nom_document
      FROM   tb_document
      WHERE  pk_document = p_file_id; --SELECT the BLOB file and its information based on the ID from the document table
    
      -- This below creates the download
      sys.HTP.init;
      sys.OWA_UTIL.mime_header(l_mime_type, FALSE);
      sys.HTP.p('Content-Length: ' || DBMS_LOB.getlength(l_blob_content));
      sys.HTP.p('Content-Disposition: attachment; filename="' || l_nom_document || '"'); --Create a download with the name of the original file
      sys.OWA_UTIL.http_header_close;                                                    --If you remove "attachment;", the file will not be downloaded automatically, but opened in a new Tab
    
      sys.WPG_DOCLOAD.download_file(l_blob_content);                                     --File is downloaded
      apex_application.stop_apex_engine;
    EXCEPTION
      WHEN apex_application.e_stop_apex_engine THEN
        NULL;
      WHEN OTHERS THEN
        HTP.p('Whoops');
    END;
    /
    

    2.创建应用程序项

    • 名称: FILE_ID
    • 范围:应用

    3.创建申请流程

    • 序列: 1
    • 进程点: Ajax 回调:当页面进程请求时运行此应用程序进程
    • PL/SQL 代码:
    BEGIN
      GET_FILE(:FILE_ID);
    END;
    

    4.转到您的卡片区域所在的页面

    • 在您的卡片区域下,右键单击“操作”->“创建操作”

    5.使用以下设置配置您的操作:

    • 标识 > 类型:全卡
    • 链接 > 输入:重定向到网址
    • 链接 > 目标: f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=GET_FILE:::FILE_ID:&PK_DOCUMENT.

    唯一要修改的是&PK_DOCUMENT。,比如你的文档表的ID是ID_DOCUMENT,那就是&ID_DOCUMENT。

    您现在可以下载文件了。


    现在,如果您想要相同的外观,请执行以下操作:

    6.卡片区域的 SQL 查询

    select PK_DOCUMENT,
           NOM_DOCUMENT,
           MIMETYPE_DOCUMENT,
           CHARSET_DOCUMENT,
           BLOB_DOCUMENT,
           COMMENT_DOCUMENT,
           TAGS_DOCUMENT,
           EXTRACT(YEAR FROM TRUNC(CREATION_DOCUMENT)) AS ANNEE, --extract the year from the date
        CASE -- if the type of the document is PDF, change the font awesome icon to PDF File
        WHEN mimetype_document = 'application/pdf' THEN
        'fa fa-file-pdf-o'
        -- if the type of the document is Excel, change the font awesome icon to Excel File
        WHEN mimetype_document = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' 
        THEN 'fa fa-file-excel-o'
        -- if the type of the document is PNG, change the font awesome icon to Image File
        WHEN mimetype_document = 'image/png' 
        THEN 'fa fa-image'
      END as ico_document --creates a column just to display the font awesome text
      from TB_DOCUMENT
    ORDER BY ANNEE DESC; --order the list from most recent to the oldest
    

    7.更改卡片区域的属性

    • > 主键列 1: [YOUR ID COLUMN]
    • 标题 > 列: [您的文件名列]
    • 正文 > 列: [YOUR COMMENT COLUMN](例如,提供有关文档的更多信息)
    • 图标和徽章 > 图标来源:图标类列
    • 图标和徽章 > 图标列: [THE ICON_COLUMN CREATED IN THE CASE STATEMENT IN THE SQL QUERY]
    • 图标和徽章 > 徽章位置: [我的“ANNEE”列,将显示年份]

    就是这样! :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2011-03-27
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多