gpt4 book ai didi

oracle - 在Oracle APEX中使用BLOB类型列

转载 作者:行者123 更新时间:2023-12-02 07:28:42 24 4
gpt4 key购买 nike

我正在使用一个表,该表具有用于存储用户简历的BLOB列(它可以是Word文档,pdf文件或任何其他二进制格式)。

现在在Oracle Apex 4.2中,当我在此表上创建表单时,我会自动获得一个浏览按钮,用于为BLOB列选择文件。我可以浏览文件并选择一个文件,然后按另一个按钮(也自动提供)上载该文件。现在,如果我在SQL Developer或Pl / SQL Developer中看到此记录,则可以看到BLOB数据已存在,可以将其保存到磁盘中,甚至可以直接从数据库中查看它。一切都很好!

但是现在,当我在Oracle APEX中的同一张表上创建报表,然后运行该报表时,它没有给我任何查看或下载二进制文件的选项,而是只提供了文本“[不支持的数据类型]”在BLOB列空间中。我在Oracle APEX联机文档中看到,当我们运行具有BLOB列的报表时,APEX会自动提供一个“下载”按钮...。但实际上并没有发生,而且我看不到在Oracle APEX中检索BLOB列数据的方法。有人可以帮帮我吗???

提前致谢。

最佳答案

通过Oracle APEX以BLOB数据类型存储和访问文件附件

This solution was also performed on an Apex 4.2 release (specifically, 4.2.5); Special thanks to the Oracle Corp for hosting my test instance at: http://apex.oracle.com.



这是我使用的表的架构设计,该表包含BLOB类型的数据列。注意:这将不是最终解决方案的设计;只需跟随更改的进行,以便您了解我对APEX表单和报表创建向导的一些限制的了解。

首次尝试:设置APEX表格,表格和报告

表:MY_DOC_STACK首次布局尝试
DOC_FILE列是BLOB类型,用于存储实际的文档附件。这是使用APEX应用程序向导创建的表单和报表的外观,该向导直接指向该表:

将文档添加到BLOB类型字段

报表查询似乎如下所示工作:

这是带有文档附件的更多记录的列表:

具有多个记录的样本报告输出

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

从图片中可以看出,它很细微,但是识别出的mime类型: Application/Octet-Stream表明APEX表单已丢失我刚刚上传的文件类型(Microsoft Word,docx)。保存的文件只是一堆垃圾字符。尝试更改文件扩展名也无济于事。

第二次(经修订)尝试:针对Blob /文档处理的APEX应用程序设计的调整

尽管应用程序区域及其组件在向导完成后无法立即运行,但是只有少量的较小编辑就可以使其进入工作状态。对表单元素 PX_DOC_FILE的仔细检查表明,BLOB表单元素需要有关附加到记录的文件的一些其他元信息:

What's missing from the blob field Form input item:

  1. Mime Type
  2. File Name
  3. Character Set
  4. BLOB Last Updated (date) Column


我继续定义了其他列,并将其添加到包含BLOB的表(MY_DOC_STACK),上载Apex表单和报告区域定义中。



请注意,列名(为简单起见)已与Blob表单元素 DOC_FILE的要求相同。

修订的文档附件Apex表格



最初,我认为必须聪明地预测Mime Types的所有可能值(msword,pdf,zip等),但这是不必要的。同样,对于保留给字符类型的其他字段以及最后更新的列。

IMPORTANT NOTE: You can actually skip form inputs for the supporting Blob meta-data fields. Values such as MIME_TYPE and CHARACTER_TYPE are automatically detected when the document attachment is uploaded. The Apex form ITEM storing the document blob just needs the names of the columns that will store this information.

ADDITIONAL NOTE: After adding the new columns, expanding the form and report column references, you will need to clear (or truncate) the existing table or reload each document attachment to be sure. You may be able to still use the uploads from the first attempts, but you'll need to verify that for yourself to be sure.



修订的文档Blob上传报告

修订报告输出讨论
  • [所有者:AUDREY HEPBURN]:我将表单中的MIME_TYPE强制设置为“Application / msword”;尽管我上传的文件是“.docx”类型,但通过Apex页面下载回来的文件却以“.doc”格式(旧的MS Word格式)保存到我的本地客户端。
  • [所有者:CHEVY CHASE]:这次,没有输入MIME_TYPE,Apex表单进程/操作在创建时将其添加到记录中:

    application / 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注入(inject)攻击进行强化的一部分。 SQL客户端中使用的直接 INSERTSELECT语句与设置默认表单设计(通过应用程序向导)来管理DML事务的方式不同。

    注意页面过程: Process Row of MY_DOC_STACK看起来更多是参数驱动的。如果某处有DML操作,它将首先基于对通过Apex表单提交的每个输入变量的仔细筛选。

    Apex可以通过许多其他方式来管理DML事务。 ...此解决方案着重于OP最有可能遇到的问题。

    祝好运!

    关于oracle - 在Oracle APEX中使用BLOB类型列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618590/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com