我刚刚开始使用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;
答案 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]