Xml 下载BLOB文件时发生编码错误
因此,我目前正试图下载一个存储在Oracle表中的xml文件,其中包含我为Oracle Apex页面创建的链接。以下是设置: 该表可以包含存储为blob的xml的2个不同文件。有了这些,我正试图制作一份关于Oracle Apex的报告,其中包含下载这些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
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_类型的第三个输入值有关吗?有几件事情似乎不正确
有几件事似乎不对
“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%确定编码。我也会核实一下。