首页 > 解决方案 > 使用 OOS_UTIL_WEB 下载已压缩的文件

问题描述

我刚刚开始玩 Oracle APEX,所以请原谅我。我正在尝试从数据库中下载一组文件,压缩它们,然后让用户通过应用程序下载它们。

我听说 OOS_UTIL_WEB.DOWNLOAD_FILE 可以帮助解决这个问题,所以我已经安装了它并且可以看到包。如果这不是一个好方法,请大喊,对此非常陌生!

下面是我的代码,它选择我想要包含的文件,然后压缩它们。然后,如果我做对了,就会提示下载。

当我尝试在按下按钮时运行代码时,出现错误:

错误:SyntaxError:JSON 中位置 0 的意外标记 P

他们的文档:https ://github.com/OraOpenSource/oos-utils/blob/master/docs/oos_util_web.md#download_file

我看不出我做错了什么,也没有与 APEX 合作到足以知道如何解决它。

我在 Oracle 12c DB 上使用 Apex 版本 18.1.0。

DECLARE

    v_ZIP_FILE BLOB;

BEGIN

    FOR v_FILE IN ( SELECT  DATA_FILENAME,
                            DATA_CONTENT
                    FROM    MY_MONEY_WEEK_UPLOADS
                    WHERE   USER_ID = :P15_USER_ID )

    LOOP

        APEX_ZIP.ADD_FILE (
            P_ZIPPED_BLOB   => v_ZIP_FILE,
            P_FILE_NAME     => v_FILE.DATA_FILENAME,
            P_CONTENT       => v_FILE.DATA_CONTENT
        );

    END LOOP;

    APEX_ZIP.FINISH (
        P_ZIPPED_BLOB       => v_ZIP_FILE );

    OOS_UTIL_WEB.DOWNLOAD_FILE (
        P_FILENAME          => 'Download.zip',
        P_BLOB              => v_ZIP_FILE );

END;

标签: oracleziporacle-apex

解决方案


请转到specific page > Advanced > Reload on Submit并将其更改为Always。希望这能解决问题。

在 APEX 5.1 或更高版本中,如果 Reload on Submit 设置为“仅用于成功”(默认),它将使用新的优化页面提交流程,并期望从 APEX 引擎返回一个特定格式的 JSON 结果。显然,当您使用覆盖 HTP 缓冲区并发出二进制内容(而不是格式良好的 JSON 结果)的页面进程时,页面上的库不知道如何处理它,因此会导致这种迟钝“意外的令牌 r...”消息。[供参考 - https://joelkallman.blogspot.com/2017/12/errors-when-downloading-file-on-page.html?_sm_au_=isV6WJ02r1MnWkP5]


推荐阅读