打开保存在 Blob 变量中的文件 - APEX 21.2

Opening a File saved in Blob Variable - APEX 21.2

我正在使用 ORA_EXCEL PL/SQL API 创建自定义 Excel 文件。我设置了它,以便在单击按钮时它通过页面提交调用 GENERATE_EXCEL_PROCESS(尝试了 ProcessingAfter 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 论坛上为我提供了解决方案。我不确定为什么会这样,希望我能更好地理解这个错误以及如何修复它,但如果其他人遇到同样的问题,请在这里发帖。

Oracle Forums Solution