Xml 下载BLOB文件时发生编码错误

Xml 下载BLOB文件时发生编码错误,xml,encoding,blob,oracle-apex,Xml,Encoding,Blob,Oracle Apex,因此,我目前正试图下载一个存储在Oracle表中的xml文件,其中包含我为Oracle Apex页面创建的链接。以下是设置: 该表可以包含存储为blob的xml的2个不同文件。有了这些,我正试图制作一份关于Oracle Apex的报告,其中包含下载这些blob的链接,每行数据对应一种类型的文件 我必须设置链接的查询如下: select max(case when a.filename like 'TYPE1%' then dbms_lob.getlength(a.upload_file) els

因此,我目前正试图下载一个存储在Oracle表中的xml文件,其中包含我为Oracle Apex页面创建的链接。以下是设置:

该表可以包含存储为blob的xml的2个不同文件。有了这些,我正试图制作一份关于Oracle Apex的报告,其中包含下载这些blob的链接,每行数据对应一种类型的文件

我必须设置链接的查询如下:

select max(case when a.filename like 'TYPE1%' then dbms_lob.getlength(a.upload_file) else null end) as upload_type1,
       max(case when a.filename like 'TYPE2%' then dbms_lob.getlength(a.upload_file) else null end) as upload_type2
from blob_table a;
sys.HTP.p('Content-Disposition: inline');
现在,页面报告应该有两列,每个列都有不同的链接,设置为每个列的大小。链接本身被设置为同一页面,分别使用“Type1”和“Type2”作为请求,这意味着触发以下PLSQL函数来下载文件:

declare

  l_blob_content blob_table.upload_file%TYPE;
  l_mime_type    varchar2(20);
  l_id           number;
  l_filename     varchar2(255);

begin

    select id
    into l_id
    from blob_table
    where file_id = :FILE_ID
    and filename like 'TYPE1%';

    select upload_file
           ,'text/xml',
           filename
    into   l_blob_content,
           l_mime_type,
           l_filename
    from   blob_table
    where  id = l_id;

    sys.HTP.init;
    sys.OWA_UTIL.mime_header(l_mime_type, FALSE, 'UTF-8');
    sys.HTP.p('Content-Length: ' || DBMS_LOB.getlength(l_blob_content));
    sys.HTP.p('Content-Disposition: filename="' || l_filename || '"');
    sys.OWA_UTIL.http_header_close;

    sys.WPG_DOCLOAD.download_file(l_blob_content);
    apex_application.stop_apex_engine;
    exception when  apex_application.e_stop_apex_engine then
        null;
    when others then
        HTP.p('Something wrong');
end;
到目前为止,我在搜索此功能时所看到的情况与此不同,这一切似乎都已就绪。但是,单击链接并尝试下载时,我收到的消息如下:


起初,我认为我出了什么问题,还测试了mime_类型为“application/xml”,文件以HTML格式显示在页面中。你知道为什么“text/xml”会出现编码错误吗?这与mime_类型的第三个输入值有关吗?

有几件事情似乎不正确

  • 错误消息“编码错误”来自哪里?这是编辑写的吗?这看起来不像是Oracle的错误消息
  • XML文档是否真正存储为二进制LOB?如果是这样,您是否确定数据编码是真正的utf-8?你是如何证实这一点的

  • 有几件事似乎不对

  • 错误消息“编码错误”来自哪里?这是编辑写的吗?这看起来不像是Oracle的错误消息
  • XML文档是否真正存储为二进制LOB?如果是这样,您是否确定数据编码是真正的utf-8?你是如何证实这一点的

  • “application/xml”可能是正确的mime_类型。您的内容配置错误。您是要下载文件还是在浏览器中显示?如果要在浏览器中显示,请使用以下命令:

    select max(case when a.filename like 'TYPE1%' then dbms_lob.getlength(a.upload_file) else null end) as upload_type1,
           max(case when a.filename like 'TYPE2%' then dbms_lob.getlength(a.upload_file) else null end) as upload_type2
    from blob_table a;
    
    sys.HTP.p('Content-Disposition: inline');
    
    如果要下载该文件,请使用以下命令:

    sys.HTP.p('Content-Disposition: attachment; filename="' || l_filename || '"');
    

    另外,我不确定它是什么时候添加的,但在APEX v20.1中,应用程序库中有一个示例文件上载和下载应用程序,您可以使用它来查看如何以声明方式完成此操作。

    'application/xml'可能是正确的mime类型。您的内容配置错误。您是要下载文件还是在浏览器中显示?如果要在浏览器中显示,请使用以下命令:

    select max(case when a.filename like 'TYPE1%' then dbms_lob.getlength(a.upload_file) else null end) as upload_type1,
           max(case when a.filename like 'TYPE2%' then dbms_lob.getlength(a.upload_file) else null end) as upload_type2
    from blob_table a;
    
    sys.HTP.p('Content-Disposition: inline');
    
    如果要下载该文件,请使用以下命令:

    sys.HTP.p('Content-Disposition: attachment; filename="' || l_filename || '"');
    

    另外,我不确定它是什么时候添加的,但在APEX v20.1中,应用程序库中有一个文件上载和下载示例应用程序,您可以使用它来查看如何以声明方式完成此操作。

    我正在尝试下载它,是的。我尝试使用“application/xml”的唯一原因是查看我为mime类型找到的代码是否准确。我将尝试这两种方法,谢谢!快速编辑:成功了!我试图遵循一个不包含“附件”部分的示例,添加它之后它就工作了,谢谢Dan!很高兴听到这个消息!:)我正在下载,是的。我尝试使用“application/xml”的唯一原因是查看我为mime类型找到的代码是否准确。我将尝试这两种方法,谢谢!快速编辑:成功了!我试图遵循一个不包含“附件”部分的示例,添加它之后它就工作了,谢谢Dan!很高兴听到这个消息!:)1.它只是在单击要下载blob文件的链接后出现在浏览器上。我不知道它是从哪里来的。2.它存储在数据库中的BLOB列中,尽管我不能100%确定编码。我也会核实一下。它只是在单击要下载blob文件的链接后出现在浏览器上。我不知道它是从哪里来的。2.它存储在数据库中的BLOB列中,尽管我不能100%确定编码。我也会核实一下。