使用已压缩的OOS_UTIL_WEB下载文件

时间:2019-03-26 12:16:53

标签: oracle zip oracle-apex

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

我听说OOS_UTIL_WEB.DOWNLOAD_FILE可以帮助解决这个问题,因此我已经安装了它并可以看到软件包。如果那不是一个好方法,请大声喊叫,这是很新的!

下面是我的代码,该代码选择我要包含的文件,然后将其压缩。然后,如果我做对了,则将提示下载。

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

错误:语法错误: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;

1 个答案:

答案 0 :(得分:0)

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

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