打开保存在 Blob 变量中的文件 - APEX 21.2
Opening a File saved in Blob Variable - APEX 21.2
我正在使用 ORA_EXCEL PL/SQL API 创建自定义 Excel 文件。我设置了它,以便在单击按钮时它通过页面提交调用 GENERATE_EXCEL_PROCESS
(尝试了 Processing
和 After Submit
处理点)并构建文件并将其保存到 Blob 变量(已确认的文件创建正在单独测试将文件写入 Oracle 目录)。
我的目标是在 PLSQL 中生成 Excel 文件,保存到 blob,然后显示一个下载对话框供用户在本地保存 excel 文件,类似于本地 Download
link Classic 报告允许您以声明方式打开。
当 运行 我遇到一个奇怪的 APEX 错误时,我只是在调试时打开 Full Trace 模式才发现的。我已经包含了下面的代码,但我不知道进一步排除故障意味着什么。看起来我在 devtools 中查看网络选项卡时收到了 Blob 的回复。
PROCEDURE apex_file_download(
p_file_name VARCHAR2,
p_generated_file BLOB,
p_file_type VARCHAR2 DEFAULT 'EXCEL'
) IS
vcMimeType VARCHAR2(1000);
blob_file BLOB;
blob_size INTEGER;
BEGIN
CASE p_file_type
WHEN 'EXCEL' THEN
vcMimeType := 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
END CASE;
blob_file := p_generated_file;
-- Get BLOB size
blob_size := dbms_lob.getlength(blob_file);
-- Print content type header for MS Excel
owa_util.mime_header(vcMimeType, FALSE, NULL);
-- Put BLOB size header
htp.p('Content-length: '|| blob_size);
-- Set file name that will be suggested when download dialog appears
htp.p('Content-Disposition: attachment; filename="'||p_file_name||'"');
-- Close header
owa_util.http_header_close;
-- Download BLOB
wpg_docload.download_file(blob_file);
apex_application.stop_apex_engine;
EXCEPTION
WHEN apex_application.e_stop_apex_engine THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
END;
有人在Oracle 论坛上为我提供了解决方案。我不确定为什么会这样,希望我能更好地理解这个错误以及如何修复它,但如果其他人遇到同样的问题,请在这里发帖。
我正在使用 ORA_EXCEL PL/SQL API 创建自定义 Excel 文件。我设置了它,以便在单击按钮时它通过页面提交调用 GENERATE_EXCEL_PROCESS
(尝试了 Processing
和 After Submit
处理点)并构建文件并将其保存到 Blob 变量(已确认的文件创建正在单独测试将文件写入 Oracle 目录)。
我的目标是在 PLSQL 中生成 Excel 文件,保存到 blob,然后显示一个下载对话框供用户在本地保存 excel 文件,类似于本地 Download
link Classic 报告允许您以声明方式打开。
当 运行 我遇到一个奇怪的 APEX 错误时,我只是在调试时打开 Full Trace 模式才发现的。我已经包含了下面的代码,但我不知道进一步排除故障意味着什么。看起来我在 devtools 中查看网络选项卡时收到了 Blob 的回复。
PROCEDURE apex_file_download(
p_file_name VARCHAR2,
p_generated_file BLOB,
p_file_type VARCHAR2 DEFAULT 'EXCEL'
) IS
vcMimeType VARCHAR2(1000);
blob_file BLOB;
blob_size INTEGER;
BEGIN
CASE p_file_type
WHEN 'EXCEL' THEN
vcMimeType := 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
END CASE;
blob_file := p_generated_file;
-- Get BLOB size
blob_size := dbms_lob.getlength(blob_file);
-- Print content type header for MS Excel
owa_util.mime_header(vcMimeType, FALSE, NULL);
-- Put BLOB size header
htp.p('Content-length: '|| blob_size);
-- Set file name that will be suggested when download dialog appears
htp.p('Content-Disposition: attachment; filename="'||p_file_name||'"');
-- Close header
owa_util.http_header_close;
-- Download BLOB
wpg_docload.download_file(blob_file);
apex_application.stop_apex_engine;
EXCEPTION
WHEN apex_application.e_stop_apex_engine THEN
NULL;
WHEN OTHERS THEN
RAISE;
END;
END;
有人在Oracle 论坛上为我提供了解决方案。我不确定为什么会这样,希望我能更好地理解这个错误以及如何修复它,但如果其他人遇到同样的问题,请在这里发帖。