use*_*525 2 oracle blob file oracle-apex
我正在使用一个具有BLOB列的表来存储用户的简历(它可以是word文档,pdf文件或任何其他二进制格式).
现在在Oracle Apex 4.2中,当我在此表上创建表单时,我会自动获得一个浏览按钮,用于为BLOB列选择一个文件.我可以浏览文件并选择一个文件,然后按下另一个按钮(也自动提供)上传文件.现在,如果我在SQL Developer或Pl/SQL开发人员中看到此记录,我看到BLOB数据存在,我可以将其保存到我的磁盘,甚至可以直接从数据库中查看.这一切都很好!
但是现在当我在同一个表上创建一个报表在Oracle APEX中,然后运行该报表时,它没有给我任何查看或下载二进制文件的选项,相反,它只给出了文本"[不支持的数据类型]"在BLOB列空间中.我在Oracle APEX在线文档中看到,当我们运行具有BLOB列的报告时,APEX会自动提供下载按钮....但实际上它没有发生,我看不到在Oracle APEX中检索BLOB列数据的方法.有人可以帮帮我吗???
提前致谢.
该溶液也在Apex 4.2版本(具体地,4.2.5)上进行; 特别感谢Oracle Corp在http://apex.oracle.com上托管我的测试实例.
这是我使用的表的模式设计,其中包含BLOB类型的数据列.注意:这不是最终解决方案的设计; 只需按照变化进行操作,以便了解我发现的有关APEX表单和报表创建向导的一些限制的内容.
表:MY_DOC_STACK第一次布局尝试

该列DOC_FILE是BLOB类型,用于存储实际的文档附件.这是使用直接指向表的APEX应用程序向导创建的表单和报表的外观:
将文档添加到BLOB类型字段

报告查询似乎如下所示:

以下是包含文档附件的更多记录的列表:
具有多个记录的样本报告输出

问题是当尝试下载放入BLOB字段的文件时:

它从图片中看Application/Octet-Stream是微妙的,但是识别出来的mime类型:是指示APEX表格已经忘记了我刚刚上传的文件类型(Microsoft Word,docx).保存的文件只是一堆垃圾字符.尝试更改文件扩展名也无济于事.
虽然应用程序区域及其组件在向导完成后不会立即生效,但只有少量的小编辑可以使其进入工作状态.对表单元素的仔细检查PX_DOC_FILE表明,BLOB表单元素需要一些关于附加到记录的文件的其他元信息:
 
 
我最初认为必须聪明地预测Mime类型(msword,pdf,zip等)的所有可能值,但这是不必要的.同样,为字符类型和最后更新的列保留的其他字段.
重要说明:您实际上可以跳过支持Blob元数据字段的表单输入.值,诸如
MIME_TYPE和CHARACTER_TYPE当文件附件上载到自动检测.存储文档blob的Apex表单ITEM只需要存储此信息的列的名称.附加注意:添加新列,展开表单和报告列引用后,您需要清除(或截断)现有表或重新加载每个文档附件以确保.您可能仍然可以使用首次尝试的上传,但您需要自行验证确认.
修订的文档Blob上载报告

[所有者:AUDREY HEPBURN]:我强迫MIME_TYPE我的表格改为"Application/msword"; 虽然我上传的文件是".docx"类型,但是通过Apex页面将其下载回来作为".doc"格式(旧的MS Word格式)保存到我的本地客户端.
[所有者:CHEVY CHASE]:这次MIME_TYPE没有输入,Apex表格处理/操作在创建时将其添加到记录中:
应用/ vnd.openxmlformats-officedocument.wordprocessingml.document
这可能是指定的格式Microsoft Office 2013.该FILE_NAME值是用户定义的,并且显式添加了.docx扩展名.结果是下载文件促使用户默认使用我的客户端计算机上的正确应用程序打开文件:MS Word(版本2013).
[所有者:CARRIE FISHER]:与测试用例(2)相同,但使用Adobe PDF(可移植文档格式).除了将MIME_TYPE自己标识为application/pdf 之外的相同行为; 文件按预期打开.
更多讨论:
所有这些问题都来自Apex用于管理应用程序架构中的插入,更新和删除的通用DML API,这很可能是Apex强化SQL注入攻击的一部分.SQL客户端中使用的直接INSERT和SELECT语句与设置默认表单设计(来自应用程序向导)以管理DML事务的方式不同.  

请注意页面进程:   Process Row of MY_DOC_STACK看起来更多参数驱动.如果在某处有DML操作,它将首先基于通过Apex表单提交的每个输入变量的仔细筛选.
Apex还有许多其他方法可以管理DML交易; ...此解决方案侧重于OP最可能遇到的问题.
祝好运!