本章围绕 APEX 中的文件全生命周期展开:图片与普通文件可以保存到数据库 BLOB、临时上传表或 OCI Object Storage;页面需要同时处理上传、预览、下载、文件名、MIME 类型、校验、授权和生命周期。

阅读顺序建议是:先理解 Woods HR 示例中的 Break Room 与职位推荐业务,再学习 Application Item、Image Upload、BLOB 图片显示、File Upload、PDF 内联预览、下载、多文件临时处理,最后扩展到 OCI Object Storage。

16 上传、查看与下载文件#

本章主线是把 APEX 中的图片、PDF 和普通文件按存储位置、显示方式、下载方式与访问控制组织起来。

本节对应官方主题“Uploading, Viewing, and Downloading Files”。中文学习稿把它作为“上传、查看与下载文件”来阅读:理解 APEX 文件能力的整体边界:何时使用 BLOB、何时使用临时文件、何时使用 OCI Object Storage,以及如何显示和下载。

源文重点:官方页面把 Image Upload、File Upload、BLOB 列、临时文件、下载动作和 OCI Object Storage 放在同一条学习路径中,提示读者按文件类型和生命周期选择合适的实现方式。

阅读时重点跟踪这些对象和概念:BLOB、PDF、Image Upload、File Upload、Application Item、Interactive Grid、URL、OCI。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16 上传、查看与下载文件”,说明它解决的核心问题是理解 APEX 文件能力的整体边界:何时使用 BLOB、何时使用临时文件、何时使用 OCI Object Storage,以及如何显示和下载。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Download 动作。
  • 操作:根据本节主题“16 上传、查看与下载文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:理解 APEX 文件能力的整体边界:何时使用 BLOB、何时使用临时文件、何时使用 OCI Object Storage,以及如何显示和下载。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.1 查看 Break Room 与推荐页面#

这一组主题先从 Woods HR 示例应用出发,确认 Break Room 图片分享、职位推荐简历上传以及支撑表视图的业务背景。

本节对应官方主题“Reviewing Break Room and Referrals Pages”。中文学习稿把它作为“查看 Break Room 与推荐页面”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:PDF。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.1 查看 Break Room 与推荐页面”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.1 查看 Break Room 与推荐页面”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-1 查看 Break Room 与推荐页面:官方捕获图片 1

16.2 在应用项中保存员工 ID#

这一组主题关注登录后如何取得当前员工 ID,并把它放入 Application Item 供后续上传、过滤和授权逻辑使用。

本节对应官方主题“Storing Employee ID in an Application Item”。中文学习稿把它作为“在应用项中保存员工 ID”来阅读:确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。

源文重点:本节重点是避免在每个页面重复查询当前员工信息,通过登录时计算的 Application Item 统一提供当前 EMPNO。

阅读时重点跟踪这些对象和概念:Application Item。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.2 在应用项中保存员工 ID”,说明它解决的核心问题是确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Application Items / Application Computations。
  • 操作:根据本节主题“16.2 在应用项中保存员工 ID”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.3 将图片上传到 BLOB 列#

这一组主题围绕 Image Upload 页面项,说明图片如何进入 BLOB 列、如何控制预览体验,以及如何用样式和页面流程完成一次照片发布。

本节对应官方主题“Uploading an Image to a BLOB Column”。中文学习稿把它作为“将图片上传到 BLOB 列”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Image Upload、Cards。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.3 将图片上传到 BLOB 列”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.3 将图片上传到 BLOB 列”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.4 显示 BLOB 列图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Displaying BLOB Column Images”。中文学习稿把它作为“显示 BLOB 列图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Cards、Classic Report、Interactive Report、Interactive Grid、Content Row、Search、Template Component。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4 显示 BLOB 列图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4 显示 BLOB 列图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.5 将文件上传到 BLOB 列#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Uploading a File to a BLOB Column”。中文学习稿把它作为“将文件上传到 BLOB 列”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、PDF、File Upload、DML。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5 将文件上传到 BLOB 列”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.5 将文件上传到 BLOB 列”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.6 内联预览 BLOB 列中的 PDF 文件#

这一组主题说明如何把存放在 BLOB 列中的 PDF 以内联方式提供给 PDF Viewer,并处理同域嵌入限制。

本节对应官方主题“Previewing BLOB Column PDF Files Inline”。中文学习稿把它作为“内联预览 BLOB 列中的 PDF 文件”来阅读:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。

源文重点:本节重点是用专用页面或模板组件把 PDF 以内联响应交给浏览器预览,并保持同源嵌入和权限边界。

阅读时重点跟踪这些对象和概念:BLOB、PDF、Template Component、URL、iframe。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.6 内联预览 BLOB 列中的 PDF 文件”,说明它解决的核心问题是确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Template Components / 页面进程 / 安全属性。
  • 操作:根据本节主题“16.6 内联预览 BLOB 列中的 PDF 文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.7 下载文件以供离线使用#

这一组主题关注文件下载,既包括单个文件下载,也包括把多个文件打包成 ZIP 归档。

本节对应官方主题“Downloading a File for Offline Use”。中文学习稿把它作为“下载文件以供离线使用”来阅读:确认下载动作返回正确文件、正确文件名和正确授权边界。

源文重点:本节重点是下载动作所需的 SQL 返回值,包括 BLOB 内容、文件名、MIME 类型,以及多文件打包时的结果集结构。

阅读时重点跟踪这些对象和概念:BLOB、SQL、MIME、ZIP。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.7 下载文件以供离线使用”,说明它解决的核心问题是确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Download 动作。
  • 操作:根据本节主题“16.7 下载文件以供离线使用”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.8 上传多个图片或文件#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Uploading Multiple Images or Files”。中文学习稿把它作为“上传多个图片或文件”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:APEX_APPLICATION_TEMP_FILES。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8 上传多个图片或文件”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.8 上传多个图片或文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.9 使用 OCI Object Bucket 存放文件#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Using an OCI Object Bucket for Files”。中文学习稿把它作为“使用 OCI Object Bucket 存放文件”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:BLOB、PDF、Content Row、URL、REST、REST Data Source、OCI、Object Bucket。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9 使用 OCI Object Bucket 存放文件”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9 使用 OCI Object Bucket 存放文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.1.1 在 Break Room 中分享照片#

这一组主题先从 Woods HR 示例应用出发,确认 Break Room 图片分享、职位推荐简历上传以及支撑表视图的业务背景。

本节对应官方主题“Sharing Photos in the Break Room”。中文学习稿把它作为“在 Break Room 中分享照片”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Cards。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.1.1 在 Break Room 中分享照片”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.1.1 在 Break Room 中分享照片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-2 在 Break Room 中分享照片:官方捕获图片 1

16.1.2 提交推荐以获得奖金#

这一组主题先从 Woods HR 示例应用出发,确认 Break Room 图片分享、职位推荐简历上传以及支撑表视图的业务背景。

本节对应官方主题“Submitting a Referral to Earn a Bonus”。中文学习稿把它作为“提交推荐以获得奖金”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Cards。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.1.2 提交推荐以获得奖金”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.1.2 提交推荐以获得奖金”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-3 提交推荐以获得奖金:官方捕获图片 1

16.1.3 研究支撑表和视图#

这一组主题先从 Woods HR 示例应用出发,确认 Break Room 图片分享、职位推荐简历上传以及支撑表视图的业务背景。

本节对应官方主题“Studying Supporting Tables and Views”。中文学习稿把它作为“研究支撑表和视图”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是识别保存照片、推荐记录、文件内容、文件名、MIME 类型、上传人和时间戳的表或视图,为后续页面配置提供数据基础。

阅读时重点跟踪这些对象和概念:BLOB、OCI、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.1.3 研究支撑表和视图”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.1.3 研究支撑表和视图”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- Used for photos stored locally in a BLOB
create view eba_demo_emp_breakroom_photo_v as
  select p.id,
         p.title,
         p.empno,
         p.mime_type,
         e.ename                      as posted_by,
         p.updated,
         p.image,
         apex_util.get_since(created) as posted,
         file_name
from eba_demo_emp_breakroom_photos p
join eba_demo_emp e on ( p.empno = e.empno )
where      image is not null
       and dbms_lob.getlength(image) > 0

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- Used for photos stored in an OCI object bucket
create view eba_demo_emp_breakroom_photo_b as
  select p.id,
         p.title,
         p.empno,
         e.ename                      as posted_by,
         p.updated,
         apex_util.get_since(created) as posted,
         file_name
    from eba_demo_emp_breakroom_photos p
    join eba_demo_emp e on ( p.empno = e.empno )
    where    image is null
          or dbms_lob.getlength(image) = 0
图 16-4 研究支撑表和视图:官方捕获图片 1
图 16-5 研究支撑表和视图:官方捕获图片 2

16.2.1 定义应用项#

这一组主题关注登录后如何取得当前员工 ID,并把它放入 Application Item 供后续上传、过滤和授权逻辑使用。

本节对应官方主题“Defining an Application Item”。中文学习稿把它作为“定义应用项”来阅读:确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。

源文重点:本节重点是避免在每个页面重复查询当前员工信息,通过登录时计算的 Application Item 统一提供当前 EMPNO。

阅读时重点跟踪这些对象和概念:Application Item、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.2.1 定义应用项”,说明它解决的核心问题是确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Application Items / Application Computations。
  • 操作:根据本节主题“16.2.1 定义应用项”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- Assigning an app item as a bind variable
:G_APP_USER_EMPNO := 1234;
-- Setting an app item value with a procedure
apex_session_state.set_value('G_APP_USER_EMPNO', 1234);
图 16-6 定义应用项:官方捕获图片 1

16.2.2 登录时计算应用项#

这一组主题关注登录后如何取得当前员工 ID,并把它放入 Application Item 供后续上传、过滤和授权逻辑使用。

本节对应官方主题“Computing an Application Item at Login”。中文学习稿把它作为“登录时计算应用项”来阅读:确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。

源文重点:本节重点是避免在每个页面重复查询当前员工信息,通过登录时计算的 Application Item 统一提供当前 EMPNO。

阅读时重点跟踪这些对象和概念:Application Item、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.2.2 登录时计算应用项”,说明它解决的核心问题是确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Application Items / Application Computations。
  • 操作:根据本节主题“16.2.2 登录时计算应用项”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认当前员工 ID 如何在登录后进入会话状态,并在上传、过滤和权限判断中被服务端可靠使用。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select empno
  from eba_demo_emp
 where ename = :APP_USER
图 16-7 登录时计算应用项:官方捕获图片 1

16.2.3 引用应用项的值#

这一组主题关注登录后如何取得当前员工 ID,并把它放入 Application Item 供后续上传、过滤和授权逻辑使用。

本节对应官方主题“Referencing the App Item Value”。中文学习稿把它作为“引用应用项的值”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是避免在每个页面重复查询当前员工信息,通过登录时计算的 Application Item 统一提供当前 EMPNO。

阅读时重点跟踪这些对象和概念:Application Item。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.2.3 引用应用项的值”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.2.3 引用应用项的值”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-8 引用应用项的值:官方捕获图片 1

16.3.1 配置图片上传项的数据源#

这一组主题围绕 Image Upload 页面项,说明图片如何进入 BLOB 列、如何控制预览体验,以及如何用样式和页面流程完成一次照片发布。

本节对应官方主题“Configuring Upload Image Item Source”。中文学习稿把它作为“配置图片上传项的数据源”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Image Upload、Automatic Row Processing (DML)、DML、SQL、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.3.1 配置图片上传项的数据源”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.3.1 配置图片上传项的数据源”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-9 配置图片上传项的数据源:官方捕获图片 1
图 16-10 配置图片上传项的数据源:官方捕获图片 2

16.3.2 控制图片上传的用户体验#

这一组主题围绕 Image Upload 页面项,说明图片如何进入 BLOB 列、如何控制预览体验,以及如何用样式和页面流程完成一次照片发布。

本节对应官方主题“Controlling Image Upload User Experience”。中文学习稿把它作为“控制图片上传的用户体验”来阅读:确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。

源文重点:本节重点是 Image Upload 页面项和 Form 区域如何协同保存图片 BLOB,同时控制裁剪、缩放、预览、允许类型和大小限制。

阅读时重点跟踪这些对象和概念:BLOB、Image Upload。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.3.2 控制图片上传的用户体验”,说明它解决的核心问题是确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.3.2 控制图片上传的用户体验”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-11 控制图片上传的用户体验:官方捕获图片 1

16.3.3 放大图片上传图标预览#

这一组主题围绕 Image Upload 页面项,说明图片如何进入 BLOB 列、如何控制预览体验,以及如何用样式和页面流程完成一次照片发布。

本节对应官方主题“Enlarging Image Upload Icon Preview”。中文学习稿把它作为“放大图片上传图标预览”来阅读:确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。

源文重点:本节重点是 Image Upload 页面项和 Form 区域如何协同保存图片 BLOB,同时控制裁剪、缩放、预览、允许类型和大小限制。

阅读时重点跟踪这些对象和概念:BLOB、Image Upload。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.3.3 放大图片上传图标预览”,说明它解决的核心问题是确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.3.3 放大图片上传图标预览”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

#P6_IMAGE {
  --a-filedrop-icon-size: 25rem;
}

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

:root {
  --a-filedrop-icon-size: 25rem;
}

16.3.4 配置应用级样式规则#

这一组主题围绕 Image Upload 页面项,说明图片如何进入 BLOB 列、如何控制预览体验,以及如何用样式和页面流程完成一次照片发布。

本节对应官方主题“Configuring Application-Wide Style Rules”。中文学习稿把它作为“配置应用级样式规则”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Cards、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.3.4 配置应用级样式规则”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.3.4 配置应用级样式规则”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

:root {
    --ut-body-content-padding-y: 1rem;
    --a-cv-item-width: 16rem;
    --a-cv-body-padding-y: 0.2rem
}
图 16-12 配置应用级样式规则:官方捕获图片 1
图 16-13 配置应用级样式规则:官方捕获图片 2

16.3.5 发布 Break Room 照片#

这一组主题围绕 Image Upload 页面项,说明图片如何进入 BLOB 列、如何控制预览体验,以及如何用样式和页面流程完成一次照片发布。

本节对应官方主题“Posting a Break Room Photo”。中文学习稿把它作为“发布 Break Room 照片”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Page Item、DML、Cards。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.3.5 发布 Break Room 照片”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.3.5 发布 Break Room 照片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-14 发布 Break Room 照片:官方捕获图片 1
图 16-15 发布 Break Room 照片:官方捕获图片 2
图 16-16 发布 Break Room 照片:官方捕获图片 3

16.4.1 在 Cards 中显示 BLOB 列图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Showing BLOB Column Images on Cards”。中文学习稿把它作为“在 Cards 中显示 BLOB 列图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Cards。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.1 在 Cards 中显示 BLOB 列图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.1 在 Cards 中显示 BLOB 列图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

<strong>&TITLE.</strong><br>
<span class="u-text-body-xs">(&POSTED. by &POSTED_BY.)</span>

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

--a-cv-item-width: 16rem;
图 16-17 在 Cards 中显示 BLOB 列图片:官方捕获图片 1
图 16-18 在 Cards 中显示 BLOB 列图片:官方捕获图片 2

16.4.2 在表单区域中预览图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Previewing Image in a Form Region”。中文学习稿把它作为“在表单区域中预览图片”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Page Item、Cards、JavaScript、SQL、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.2 在表单区域中预览图片”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.2 在表单区域中预览图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select id,
       title,
       image, /* BLOB image */
       updated,
       file_name,
       mime_type,
       apex_string.format('%s (%s by %s)',
            title,
            posted,
            posted_by) as description
  from eba_demo_emp_breakroom_photo_v

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

.vertical_stretch {
   height: calc(100vh - 3em);
}

#P18_IMAGE {
   display : block;
   margin  : auto;
}
图 16-19 在表单区域中预览图片:官方捕获图片 1
图 16-20 在表单区域中预览图片:官方捕获图片 2

16.4.3 在经典报表中显示 BLOB 图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Displaying BLOB Images in Classic Reports”。中文学习稿把它作为“在经典报表中显示 BLOB 图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Classic Report。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.3 在经典报表中显示 BLOB 图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.3 在经典报表中显示 BLOB 图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select  id,
        title,
        sys.dbms_lob.getlength(image) image, /* Size of BLOB Image */
        file_name,
        posted,
        posted_by,
        updated
from eba_demo_emp_breakroom_photo_v
order by updated desc

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

.t-Report-report img {
    /* constrain width or height + keep aspect ratio
     *
     * width: 130px;
     */
    height: 130px;
    object-fit: contain;
}
图 16-21 在经典报表中显示 BLOB 图片:官方捕获图片 1
图 16-22 在经典报表中显示 BLOB 图片:官方捕获图片 2

16.4.4 在交互式报表中使用 BLOB 图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Using BLOB Images in Interactive Reports”。中文学习稿把它作为“在交互式报表中使用 BLOB 图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Interactive Report。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.4 在交互式报表中使用 BLOB 图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.4 在交互式报表中使用 BLOB 图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select id,
       title,
       sys.dbms_lob.getlength(image) image, /* Size of BLOB Image */
       file_name,
       posted,
       posted_by,
       updated
from eba_demo_emp_breakroom_photo_v
order by updated desc

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

.a-IRR-table img {
    height: 90px;
    object-fit: contain;
}

.a-IRR {
   --a-gv-cell-padding-y: 0px;
}
图 16-23 在交互式报表中使用 BLOB 图片:官方捕获图片 1
图 16-24 在交互式报表中使用 BLOB 图片:官方捕获图片 2

16.4.5 在 Content Row 中包含 BLOB 图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Including BLOB Images in Content Row”。中文学习稿把它作为“在 Content Row 中包含 BLOB 图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Content Row、Template Component。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.5 在 Content Row 中包含 BLOB 图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.5 在 Content Row 中包含 BLOB 图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select id,
       title,
       image, /* BLOB image */
       file_name,
       posted,
       posted_by,
       mime_type,
       updated
from eba_demo_emp_breakroom_photo_v

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

.t-Avatar--image {
   --ut-avatar-size: 10rem;
}
图 16-25 在 Content Row 中包含 BLOB 图片:官方捕获图片 1
图 16-26 在 Content Row 中包含 BLOB 图片:官方捕获图片 2

16.4.6 在搜索结果中查看 BLOB 图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Viewing BLOB Images in Search Results”。中文学习稿把它作为“在搜索结果中查看 BLOB 图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Search。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.6 在搜索结果中查看 BLOB 图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.6 在搜索结果中查看 BLOB 图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select id,
       title,
       image, /* BLOB image */
       file_name,
       posted,
       posted_by,
       mime_type,
       updated
from eba_demo_emp_breakroom_photo_v

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

.a-ResultsItem-image img {
    /* constrain width or height + keep aspect ratio
     *
     * height: 50px;
     */
   width: 50px;
   object-fit: contain;
}
图 16-27 在搜索结果中查看 BLOB 图片:官方捕获图片 1
图 16-28 在搜索结果中查看 BLOB 图片:官方捕获图片 2

16.4.7 在交互式网格中显示 BLOB 图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Showing BLOB Images in Interactive Grid”。中文学习稿把它作为“在交互式网格中显示 BLOB 图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Page Item、Interactive Grid、GET_BLOB_FILE_SRC、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7 在交互式网格中显示 BLOB 图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.4.7 在交互式网格中显示 BLOB 图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.4.8 在任意位置使用 BLOB 列图片 URL#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Using BLOB Column Image URLs Anywhere”。中文学习稿把它作为“在任意位置使用 BLOB 列图片 URL”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Interactive Grid、JavaScript、x01、URL、SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.8 在任意位置使用 BLOB 列图片 URL”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.8 在任意位置使用 BLOB 列图片 URL”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select apex_page.get_url(
            p_page      => 9000,
            p_x01       => id,
            p_plain_url => true)
       end as image_url
from eba_demo_emp_breakroom_photo_v
where id = :P7_BREAKROOM_IMAGE_ID
图 16-29 在任意位置使用 BLOB 列图片 URL:官方捕获图片 1

16.5.1 选择开放职位以添加推荐#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Selecting an Open Job to Add Referral”。中文学习稿把它作为“选择开放职位以添加推荐”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、PDF。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.1 选择开放职位以添加推荐”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.5.1 选择开放职位以添加推荐”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.5.2 向对话框传递客户端数据#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Passing Client-Side Data to Dialogs”。中文学习稿把它作为“向对话框传递客户端数据”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:BLOB、JavaScript、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2 向对话框传递客户端数据”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2 向对话框传递客户端数据”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.5.3 配置文件上传到 BLOB 列#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Configuring File Upload to a BLOB Column”。中文学习稿把它作为“配置文件上传到 BLOB 列”来阅读:确认 File Upload 页面项如何把普通文件、文件名、MIME 类型和业务主键一起保存。

源文重点:本节重点是 File Upload 页面项如何保存任意文件类型,并把 BLOB、文件名、MIME 类型和业务记录关联起来。

阅读时重点跟踪这些对象和概念:BLOB、PDF、File Upload、Page Item、Automatic Row Processing (DML)、DML、SQL、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.3 配置文件上传到 BLOB 列”,说明它解决的核心问题是确认 File Upload 页面项如何把普通文件、文件名、MIME 类型和业务主键一起保存。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.5.3 配置文件上传到 BLOB 列”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 File Upload 页面项如何把普通文件、文件名、MIME 类型和业务主键一起保存。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-30 配置文件上传到 BLOB 列:官方捕获图片 1
图 16-31 配置文件上传到 BLOB 列:官方捕获图片 2

16.5.4 确认自动 DML 处理#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Ensuring the Automatic DML Process”。中文学习稿把它作为“确认自动 DML 处理”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Automatic Row Processing (DML)、DML、SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.4 确认自动 DML 处理”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.5.4 确认自动 DML 处理”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-32 确认自动 DML 处理:官方捕获图片 1
图 16-33 确认自动 DML 处理:官方捕获图片 2

16.5.5 控制文件上传项行为#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Controlling File Upload Item Behavior”。中文学习稿把它作为“控制文件上传项行为”来阅读:确认 File Upload 页面项如何把普通文件、文件名、MIME 类型和业务主键一起保存。

源文重点:本节重点是 File Upload 页面项如何保存任意文件类型,并把 BLOB、文件名、MIME 类型和业务记录关联起来。

阅读时重点跟踪这些对象和概念:BLOB、File Upload、Page Item。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.5 控制文件上传项行为”,说明它解决的核心问题是确认 File Upload 页面项如何把普通文件、文件名、MIME 类型和业务主键一起保存。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.5.5 控制文件上传项行为”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 File Upload 页面项如何把普通文件、文件名、MIME 类型和业务主键一起保存。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-34 控制文件上传项行为:官方捕获图片 1

16.5.6 提交职位推荐简历#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Submitting a Job Referral CV”。中文学习稿把它作为“提交职位推荐简历”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、PDF、Automatic Row Processing (DML)、DML。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.6 提交职位推荐简历”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.5.6 提交职位推荐简历”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-35 提交职位推荐简历:官方捕获图片 1
图 16-36 提交职位推荐简历:官方捕获图片 2
图 16-37 提交职位推荐简历:官方捕获图片 3

16.6.1 创建 PDF Viewer 模板组件#

这一组主题说明如何把存放在 BLOB 列中的 PDF 以内联方式提供给 PDF Viewer,并处理同域嵌入限制。

本节对应官方主题“Creating PDF Viewer Template Component”。中文学习稿把它作为“创建 PDF Viewer 模板组件”来阅读:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。

源文重点:本节重点是用专用页面或模板组件把 PDF 以内联响应交给浏览器预览,并保持同源嵌入和权限边界。

阅读时重点跟踪这些对象和概念:BLOB、PDF、Template Component、URL、iframe。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.6.1 创建 PDF Viewer 模板组件”,说明它解决的核心问题是确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Template Components / 页面进程 / 安全属性。
  • 操作:根据本节主题“16.6.1 创建 PDF Viewer 模板组件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

<p align="center">
    {if PDF_URL/}
    <iframe style="height: calc(100vh - #OTHER_CONTENT_HEIGHT#rem)"
              src="assets/images/oracle-apex-26.1/creating-pdf-viewer-template-component.html" data-original-src="https://docs.oracle.com/en/database/oracle/apex/26.1/apxdc/creating-pdf-viewer-template-component.html#PDF_URL#"
              width="100%" height="100%"></iframe>
    {endif/}
</p>
图 16-38 创建 PDF Viewer 模板组件:官方捕获图片 1

16.6.2 从 BLOB 列内联提供 PDF#

这一组主题说明如何把存放在 BLOB 列中的 PDF 以内联方式提供给 PDF Viewer,并处理同域嵌入限制。

本节对应官方主题“Serving an Inline PDF from a BLOB Column”。中文学习稿把它作为“从 BLOB 列内联提供 PDF”来阅读:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。

源文重点:本节重点是用专用页面或模板组件把 PDF 以内联响应交给浏览器预览,并保持同源嵌入和权限边界。

阅读时重点跟踪这些对象和概念:BLOB、PDF、x01、URL、SQL、PL/SQL、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.6.2 从 BLOB 列内联提供 PDF”,说明它解决的核心问题是确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Template Components / 页面进程 / 安全属性。
  • 操作:根据本节主题“16.6.2 从 BLOB 列内联提供 PDF”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_file
procedure download_referral_cv_pdf(
    p_id in number)
is
    l_file_blob eba_demo_emp_job_referrals.candidate_cv_resume%type;
    l_mime_type eba_demo_emp_job_referrals.mime_type%type;
begin
    select candidate_cv_resume, mime_type
      into l_file_blob, l_mime_type
      from eba_demo_emp_job_referrals
     where id = p_id;

    apex_http.download(
        p_blob         => l_file_blob,
        p_content_type => l_mime_type,
        p_is_inline    => true );
end download_referral_cv_pdf;
图 16-39 从 BLOB 列内联提供 PDF:官方捕获图片 1
图 16-40 从 BLOB 列内联提供 PDF:官方捕获图片 2

16.6.3 在职位推荐页面中使用 PDF Viewer#

这一组主题说明如何把存放在 BLOB 列中的 PDF 以内联方式提供给 PDF Viewer,并处理同域嵌入限制。

本节对应官方主题“Using PDF Viewer in Job Referrals Page”。中文学习稿把它作为“在职位推荐页面中使用 PDF Viewer”来阅读:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。

源文重点:本节重点是用专用页面或模板组件把 PDF 以内联响应交给浏览器预览,并保持同源嵌入和权限边界。

阅读时重点跟踪这些对象和概念:BLOB、PDF、Page Item、Template Component、x01、URL、iframe。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.6.3 在职位推荐页面中使用 PDF Viewer”,说明它解决的核心问题是确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Template Components / 页面进程 / 安全属性。
  • 操作:根据本节主题“16.6.3 在职位推荐页面中使用 PDF Viewer”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 PDF 内容如何以 inline 响应提供,并由页面组件安全嵌入和预览。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select case
        when :P11_REFERRAL_CANDIDATE_ID is not null then
            apex_page.get_url(
                p_page         => 9001,
                p_x01          => :P11_REFERRAL_CANDIDATE_ID,
                p_absolute_url => true)
       end as PDF_PAGE_URL
from dual
图 16-41 在职位推荐页面中使用 PDF Viewer:官方捕获图片 1
图 16-42 在职位推荐页面中使用 PDF Viewer:官方捕获图片 2
图 16-43 在职位推荐页面中使用 PDF Viewer:官方捕获图片 3

16.6.4 允许同域嵌入#

这一组主题说明如何把存放在 BLOB 列中的 PDF 以内联方式提供给 PDF Viewer,并处理同域嵌入限制。

本节对应官方主题“Allowing Embedding from Same Domain”。中文学习稿把它作为“允许同域嵌入”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是用专用页面或模板组件把 PDF 以内联响应交给浏览器预览,并保持同源嵌入和权限边界。

阅读时重点跟踪这些对象和概念:BLOB、PDF、iframe。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.6.4 允许同域嵌入”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.6.4 允许同域嵌入”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

Refused to display 'https://example.com/' in a frame
because it set 'X-Frame-Options' to 'deny'.
图 16-44 允许同域嵌入:官方捕获图片 1
图 16-45 允许同域嵌入:官方捕获图片 2

16.7.1 配置单文件下载操作#

这一组主题关注文件下载,既包括单个文件下载,也包括把多个文件打包成 ZIP 归档。

本节对应官方主题“Configuring Single-File Download Action”。中文学习稿把它作为“配置单文件下载操作”来阅读:确认下载动作返回正确文件、正确文件名和正确授权边界。

源文重点:本节重点是下载动作所需的 SQL 返回值,包括 BLOB 内容、文件名、MIME 类型,以及多文件打包时的结果集结构。

阅读时重点跟踪这些对象和概念:BLOB、PDF、Dynamic Action、SQL、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.7.1 配置单文件下载操作”,说明它解决的核心问题是确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Download 动作。
  • 操作:根据本节主题“16.7.1 配置单文件下载操作”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select candidate_cv_resume,
       file_name,
       mime_type
  from eba_demo_emp_job_referrals
 where id = :P11_REFERRAL_CANDIDATE_ID
图 16-46 配置单文件下载操作:官方捕获图片 1

16.7.2 下载多个文件的 ZIP 归档#

这一组主题关注文件下载,既包括单个文件下载,也包括把多个文件打包成 ZIP 归档。

本节对应官方主题“Downloading ZIP Archive of Multiple Files”。中文学习稿把它作为“下载多个文件的 ZIP 归档”来阅读:确认下载动作返回正确文件、正确文件名和正确授权边界。

源文重点:本节重点是下载动作所需的 SQL 返回值,包括 BLOB 内容、文件名、MIME 类型,以及多文件打包时的结果集结构。

阅读时重点跟踪这些对象和概念:BLOB、Dynamic Action、SQL、MIME、ZIP。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.7.2 下载多个文件的 ZIP 归档”,说明它解决的核心问题是确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Download 动作。
  • 操作:根据本节主题“16.7.2 下载多个文件的 ZIP 归档”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select candidate_cv_resume,
       file_name
  from eba_demo_emp_job_referrals
 where job_id = :P11_SELECTED_JOB_ID
图 16-47 下载多个文件的 ZIP 归档:官方捕获图片 1

16.8.1 处理临时上传文件#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Handling Temporary Uploaded Files”。中文学习稿把它作为“处理临时上传文件”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Image Upload、File Upload、APEX_APPLICATION_TEMP_FILES。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.1 处理临时上传文件”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.1 处理临时上传文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.8.2 发布多张 Break Room 照片#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Posting Multiple Break Room Photos”。中文学习稿把它作为“发布多张 Break Room 照片”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Image Upload、Interactive Grid、APEX_APPLICATION_TEMP_FILES、Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2 发布多张 Break Room 照片”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.8.2 发布多张 Break Room 照片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.9.1 理解 Object Bucket URL 格式#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Understanding Object Bucket URL Format”。中文学习稿把它作为“理解 Object Bucket URL 格式”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:URL、REST、OCI、Object Bucket、Bucket。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.1 理解 Object Bucket URL 格式”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.1 理解 Object Bucket URL 格式”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/x1y2z3a4b5c6/b/companion-bucket

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/x1y2z3a4b5c6/b/companion-bucket/o/myfile.jpg
图 16-48 理解 Object Bucket URL 格式:官方捕获图片 1

16.9.2 为 REST API 定义 OCI Web Credential#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Defining OCI Web Credential for REST APIs”。中文学习稿把它作为“为 REST API 定义 OCI Web Credential”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:URL、REST、OCI、Object Bucket、Bucket、Web Credential、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.2 为 REST API 定义 OCI Web Credential”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.2 为 REST API 定义 OCI Web Credential”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/x1y2z3a4b5c6/b/
图 16-49 为 REST API 定义 OCI Web Credential:官方捕获图片 1

16.9.3 使用 REST Data Source 列出 Bucket#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Listing Buckets with REST Data Source”。中文学习稿把它作为“使用 REST Data Source 列出 Bucket”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:URL、REST、REST Data Source、OCI、Object Bucket、Bucket、Web Credential。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.3 使用 REST Data Source 列出 Bucket”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.3 使用 REST Data Source 列出 Bucket”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/x1y2z3a4b5c6/b/
图 16-50 使用 REST Data Source 列出 Bucket:官方捕获图片 1
图 16-51 使用 REST Data Source 列出 Bucket:官方捕获图片 2
图 16-52 使用 REST Data Source 列出 Bucket:官方捕获图片 3

16.9.4 使用 REST Data Source 访问 Bucket 文件#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Using REST Data Source for Bucket Files”。中文学习稿把它作为“使用 REST Data Source 访问 Bucket 文件”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:URL、REST、REST Data Source、OCI、Object Bucket、Bucket、PAR。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.4 使用 REST Data Source 访问 Bucket 文件”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.4 使用 REST Data Source 访问 Bucket 文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/x1y2z3a4b5c6/b/:bucketname/o/
图 16-53 使用 REST Data Source 访问 Bucket 文件:官方捕获图片 1

16.9.5 从 Object Bucket 内联提供文件#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Serving Inline File from Object Bucket”。中文学习稿把它作为“从 Object Bucket 内联提供文件”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:BLOB、URL、REST、REST Data Source、OCI、Object Bucket、Bucket、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.5 从 Object Bucket 内联提供文件”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.5 从 Object Bucket 内联提供文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_oci
-------------------------------------------------------------------------------
-- Download a file from an object bucket
-------------------------------------------------------------------------------
procedure download_bucket_file(
    p_bucket_name         in varchar2,
    p_file_name           in varchar2,
    p_module_static_id    in varchar2 default 'bucket_objects',
    p_operation_static_id in varchar2 default 'get_file')
is
    l_blob   blob;
    l_mime   varchar2(4000);
begin
    get_bucket_file(
        p_bucket_name         => p_bucket_name,
        p_file_name           => p_file_name,
        p_module_static_id    => p_module_static_id,
        p_operation_static_id => p_operation_static_id,
        p_file_contents       => l_blob,
        p_mime_type           => l_mime);

    apex_http.download(
        p_blob         => l_blob,
        p_content_type => l_mime,
        p_is_inline    => true,
        p_filename     => p_file_name);
end download_bucket_file;

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_oci
-------------------------------------------------------------------------------
-- Get file and mimetype from an object bucket file
-------------------------------------------------------------------------------
procedure get_bucket_file(
    p_bucket_name         in varchar2,
    p_file_name           in varchar2,
    p_file_contents      out blob,
    p_mime_type          out varchar2,
    p_module_static_id    in varchar2 default 'bucket_objects',
    p_operation_static_id in varchar2 default 'get_file')
is
    l_url    varchar2(32767);
    l_cred   varchar2(4000);
begin
    bucket_url_for(
        p_module_static_id     => p_module_static_id,
        p_operation_static_id  => p_operation_static_id,
        p_bucket_name          => p_bucket_name,
        p_file_name            => p_file_name,
        p_credential_static_id => l_cred,
        p_file_url             => l_url);

    apex_web_service.set_request_headers(
        p_name_01  => 'Accept',          p_value_01 => '*/*',
        p_name_02  => 'Accept-Encoding', p_value_02 => 'identity',
        p_reset    => true);

    p_file_contents := apex_web_service.make_rest_request_b(
                p_credential_static_id => l_cred,
                p_http_method          => 'GET',
                p_url                  => l_url );

    if    apex_web_service.g_status_code <> 200
       or p_file_contents is null
       or dbms_lob.getlength(p_file_contents) = 0
    then
        raise_application_error(-20001,
            'Download failed: HTTP '||apex_web_service.g_status_code);
    end if;

    p_mime_type := nvl(apex_web_service.get_request_header('Content-Type'),
                    'application/octet-stream');
end get_bucket_file;

源示例 3:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_oci
-------------------------------------------------------------------------------
-- Return absolute URL of object bucket file using REST Data Source
-- operation as a template
-------------------------------------------------------------------------------
procedure bucket_url_for(
    p_module_static_id      in varchar2,
    p_operation_static_id   in varchar2,
    p_bucket_name           in varchar2,
    p_file_name             in varchar2,
    p_credential_static_id out varchar2,
    p_file_url             out varchar2)
is
    c_app_id constant number := sys_context('APEX$SESSION','APP_ID');
begin
    select replace(
             replace(m.url_endpoint||o.url_pattern, ':filename', p_file_name),
             ':bucketname', p_bucket_name),
           m.credential_static_id
      into p_file_url, p_credential_static_id
      from apex_appl_web_src_operations o
      join apex_appl_web_src_modules   m on o.module_id = m.module_id
     where o.operation_static_id = p_operation_static_id
       and m.module_static_id    = p_module_static_id
       and o.application_id      = c_app_id;
end bucket_url_for;

16.9.6 浏览并选择 Bucket 文件#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Browsing and Selecting Bucket Files”。中文学习稿把它作为“浏览并选择 Bucket 文件”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:Content Row、REST、REST Data Source、OCI、Object Bucket、Bucket、SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.6 浏览并选择 Bucket 文件”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.6 浏览并选择 Bucket 文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.9.7 将上传文件存入 Object Bucket#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Storing an Uploaded File in Object Bucket”。中文学习稿把它作为“将上传文件存入 Object Bucket”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:BLOB、URL、REST、REST Data Source、OCI、Object Bucket、Bucket、APEX_APPLICATION_TEMP_FILES。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.7 将上传文件存入 Object Bucket”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.7 将上传文件存入 Object Bucket”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_oci
-------------------------------------------------------------------------------
-- Put a breakroom photo temp file into an object bucket
-------------------------------------------------------------------------------
procedure put_breakroom_photo_temp_file(
    p_bucket_name         in varchar2,
    p_unique_file_name    in varchar2,
    p_breakroom_photo_id  in number,
    p_module_static_id    in varchar2 default 'bucket_objects',
    p_operation_static_id in varchar2 default 'get_file')
is
    l_temp_image_blob blob;
    l_file_name       varchar2(1000);
begin
    for j in (select blob_content, mime_type, filename
                from apex_application_temp_files
               where name = p_unique_file_name)
    loop
        if     j.blob_content is not null
           and dbms_lob.getlength(j.blob_content) > 0
        then
            for k in (select file_name, mime_type
                        from eba_demo_emp_breakroom_photos
                       where id = p_breakroom_photo_id)
            loop
                l_file_name := p_breakroom_photo_id||'_'||j.filename;
                put_bucket_file(
                    p_bucket_name         => p_bucket_name,
                    p_file_name           => l_file_name,
                    p_mime_type           => j.mime_type,
                    p_file_contents       => j.blob_content,
                    p_module_static_id    => p_module_static_id,
                    p_operation_static_id => p_operation_static_id);
            end loop;
            -- Record the filename the uploaded file gets in the bucket
            update eba_demo_emp_breakroom_photos
               set file_name = l_file_name
             where id = p_breakroom_photo_id;
        end if;
    end loop;
end put_breakroom_photo_temp_file;

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_oci
-------------------------------------------------------------------------------
-- Put a file into an object bucket
-------------------------------------------------------------------------------
procedure put_bucket_file(
    p_bucket_name         in varchar2,
    p_file_name           in varchar2,
    p_mime_type           in varchar2,
    p_file_contents       in blob,
    p_module_static_id    in varchar2 default 'bucket_objects',
    p_operation_static_id in varchar2 default 'get_file')
is
    l_clob   clob;
    l_url    varchar2(32767);
    l_cred   varchar2(4000);
begin
    bucket_url_for(
        p_module_static_id     => p_module_static_id,
        p_operation_static_id  => p_operation_static_id,
        p_bucket_name          => p_bucket_name,
        p_file_name            => p_file_name,
        p_credential_static_id => l_cred,
        p_file_url             => l_url);

    apex_web_service.set_request_headers(
        p_name_01  => 'Content-Type',
        p_value_01 => p_mime_type,
        p_reset    => true);

    l_clob := apex_web_service.make_rest_request(
                p_credential_static_id => l_cred,
                p_http_method          => 'PUT',
                p_url                  => l_url,
                p_body_blob            => p_file_contents);

    if apex_web_service.g_status_code not in (200,201) then
        raise_application_error(-20001,
            'Upload failed: HTTP '||apex_web_service.g_status_code);
    end if;
end put_bucket_file;

16.9.8 探索 Pre-Authenticated Requests#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Exploring Pre-Authenticated Requests”。中文学习稿把它作为“探索 Pre-Authenticated Requests”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:URL、OCI、Object Bucket、Bucket、Pre-Authenticated Request (PAR)、PAR。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.8 探索 Pre-Authenticated Requests”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.9.8 探索 Pre-Authenticated Requests”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.4.7.1 使用 GET_BLOB_FILE_SRC 生成图片 URL#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Using GET_BLOB_FILE_SRC for Image URL”。中文学习稿把它作为“使用 GET_BLOB_FILE_SRC 生成图片 URL”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Page Item、Interactive Grid、GET_BLOB_FILE_SRC、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.1 使用 GET_BLOB_FILE_SRC 生成图片 URL”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.7.1 使用 GET_BLOB_FILE_SRC 生成图片 URL”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select id,
       title,
       case
           when     image is not null
                and dbms_lob.getlength(image) > 0
           then apex_string.format('<img alt="%s" title="%s" src="assets/images/oracle-apex-26.1/e4843f1f016e0ce9.bin" data-original-src="https://docs.oracle.com/en/database/oracle/apex/26.1/apxdc/%s">',
                apex_escape.html_attribute(title),
                apex_escape.html_attribute(title),
                apex_util.get_blob_file_src('P12_IMAGE', ID))
       end as image,
       file_name,
       posted,
       posted_by,
       updated
from eba_demo_emp_breakroom_photo_v

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

Team's "Best" Food & Drink

源示例 3:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

Team&#x27;s&#x20;&#x22;Best&#x22;&#x20;Food&#x20;&#x26;&#x20;Drink

源示例 4:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

.a-IG img {
    /* constrain width or height + keep aspect ratio
     * width: 90px;
     */
    height: 90px;
    object-fit: contain;
}
图 16-54 使用 GET_BLOB_FILE_SRC 生成图片 URL:官方捕获图片 1
图 16-55 使用 GET_BLOB_FILE_SRC 生成图片 URL:官方捕获图片 2

16.4.7.2 配置引用图片页面项#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Configuring Reference Image Page Item”。中文学习稿把它作为“配置引用图片页面项”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Page Item、Interactive Grid、GET_BLOB_FILE_SRC、URL、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.2 配置引用图片页面项”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.7.2 配置引用图片页面项”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select
       ⋱
         apex_util.get_blob_file_src('P12_IMAGE', ID)
       ⋰
  from eba_demo_emp_breakroom_photo_v
图 16-56 配置引用图片页面项:官方捕获图片 1

16.4.7.3 用页面内联提供 BLOB 图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Serving Inline BLOB Images with a Page”。中文学习稿把它作为“用页面内联提供 BLOB 图片”来阅读:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Interactive Grid、APEX_UTIL.GET_BLOB_FILE_SRC、GET_BLOB_FILE_SRC、x01、URL、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.3 用页面内联提供 BLOB 图片”,说明它解决的核心问题是确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.7.3 用页面内联提供 BLOB 图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 BLOB 内容的读取、显示、URL 生成和授权检查是否形成闭环。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_file
procedure download_breakroom_photo(
    p_id in number)
is
    l_file_blob eba_demo_emp_breakroom_photos.image%type;
    l_mime_type eba_demo_emp_breakroom_photos.mime_type%type;
begin
    select image, mime_type
      into l_file_blob, l_mime_type
      from eba_demo_emp_breakroom_photos
     where id = p_id;

    apex_http.download(
        p_blob         => l_file_blob,
        p_content_type => l_mime_type,
        p_is_inline    => true );
end download_breakroom_photo;
图 16-57 用页面内联提供 BLOB 图片:官方捕获图片 1
图 16-58 用页面内联提供 BLOB 图片:官方捕获图片 2

16.4.7.4 使用内联图片服务页面#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Using an Inline Image Serving Page”。中文学习稿把它作为“使用内联图片服务页面”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Interactive Grid、JavaScript、GET_BLOB_FILE_SRC、x01、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.4 使用内联图片服务页面”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.7.4 使用内联图片服务页面”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select id,
       title,
       case
           when     image is not null
                and dbms_lob.getlength(image) > 0
           then apex_string.format('<img alt="%s" title="%s" src="assets/images/oracle-apex-26.1/e4843f1f016e0ce9.bin" data-original-src="https://docs.oracle.com/en/database/oracle/apex/26.1/apxdc/%s">',
                apex_escape.html_attribute(title),
                apex_escape.html_attribute(title),
                apex_page.get_url(
                    p_page => 9000,
                    p_x01  => ID))
       end as image,
       file_name,
       posted,
       posted_by,
       updated
from eba_demo_emp_breakroom_photo_v
图 16-59 使用内联图片服务页面:官方捕获图片 1

16.4.7.5 权衡 X01 与受保护页面项#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Weighing X01 Against a Secure Page Item”。中文学习稿把它作为“权衡 X01 与受保护页面项”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:BLOB、Page Item、Interactive Grid、Checksum、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.5 权衡 X01 与受保护页面项”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.4.7.5 权衡 X01 与受保护页面项”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.5.1.1 使用 Trigger Actions 设置所选职位信息#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Using Trigger Actions to Set Selected Job Info”。中文学习稿把它作为“使用 Trigger Actions 设置所选职位信息”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:JavaScript。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.1.1 使用 Trigger Actions 设置所选职位信息”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.1.1 使用 Trigger Actions 设置所选职位信息”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-60 使用 Trigger Actions 设置所选职位信息:官方捕获图片 1
图 16-61 使用 Trigger Actions 设置所选职位信息:官方捕获图片 2
图 16-62 使用 Trigger Actions 设置所选职位信息:官方捕获图片 3

16.5.1.2 在所选职位变化时调整界面#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Adjusting UI When Selected Job Changes”。中文学习稿把它作为“在所选职位变化时调整界面”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Dynamic Action。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.1.2 在所选职位变化时调整界面”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.5.1.2 在所选职位变化时调整界面”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-63 在所选职位变化时调整界面:官方捕获图片 1

16.5.2.1 打开服务器生成的对话框 URL#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Opening Server-Generated Dialog URL”。中文学习稿把它作为“打开服务器生成的对话框 URL”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:JavaScript、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.1 打开服务器生成的对话框 URL”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2.1 打开服务器生成的对话框 URL”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.5.2.2 直接向对话框传递客户端数据#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Passing Client Data Directly to Dialogs”。中文学习稿把它作为“直接向对话框传递客户端数据”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:Page Item、JavaScript、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.2 直接向对话框传递客户端数据”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2.2 直接向对话框传递客户端数据”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.8.1.1 控制临时文件保留方式#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Controlling Retention of Temporary Files”。中文学习稿把它作为“控制临时文件保留方式”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:BLOB、Image Upload、File Upload、APEX_APPLICATION_TEMP_FILES、MIME。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.1.1 控制临时文件保留方式”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.1.1 控制临时文件保留方式”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源表格 1:表格结构按源页面保留,列名和配置值不改写,避免影响与 APEX UI 的对照。

Column NameData TypeDescription
NAMEVARCHAR2Unique name of the uploaded file
BLOB_CONTENTBLOBBinary content of the file
FILENAMEVARCHAR2Original file name
MIME_TYPEVARCHAR2MIME type of the file
APPLICATION_IDNUMBERAPEX Application ID
CREATED_ONDATEDate and time when file was created

16.8.1.2 通过唯一名称引用临时文件#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Referencing Temp Files by Unique Name”。中文学习稿把它作为“通过唯一名称引用临时文件”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Image Upload、File Upload、APEX_APPLICATION_TEMP_FILES。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.1.2 通过唯一名称引用临时文件”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.8.1.2 通过唯一名称引用临时文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.8.1.3 显示临时文件名和类型#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Displaying Temp File Names and Types”。中文学习稿把它作为“显示临时文件名和类型”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:PDF、ZIP。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.1.3 显示临时文件名和类型”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.8.1.3 显示临时文件名和类型”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select filename,
       case mime_type
          when 'application/pdf' then 'PDF Document'
          when 'image/jpeg'      then 'JPEG Image'
          when 'image/png'       then 'PNG Image'
          when 'image/gif'       then 'GIF Image'
          when 'text/plain'      then 'Text File'
          when 'application/zip' then 'ZIP Archive'
          when 'text/csv'        then 'CSV File'
          when 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
          then 'Word Document'
          when 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
          then 'Excel Spreadsheet'
          when 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
          then 'PowerPoint Presentation'
          else 'Other Type'
       end as file_type_description
 from apex_application_temp_files
where application_id = :APP_ID

16.8.1.4 处理临时上传文件#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Processing Temporary Uploaded Files”。中文学习稿把它作为“处理临时上传文件”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:页面项、区域、处理、会话状态、授权和运行时验证。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.1.4 处理临时上传文件”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.1.4 处理临时上传文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

for j in (select blob_content,
                 filename,
                 mime_type
            from apex_application_temp_files
           where application_id = :APP_ID
             and name in (select column_value
                            from apex_string.split(:P17_IMAGE),':')))
loop
    -- Reference j.mime_type, j.filename, j.blob_content in here
end loop;

16.8.1.5 删除临时上传文件#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Deleting Temporary Uploaded Files”。中文学习稿把它作为“删除临时上传文件”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:APEX_APPLICATION_TEMP_FILES、SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.1.5 删除临时上传文件”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.1.5 删除临时上传文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

delete from apex_application_temp_files;

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

delete from apex_application_temp_files
 where application_id = :APP_ID
             and name in (select column_value
                            from apex_string.split(:P17_IMAGE),':'));

16.8.2.1 配置多文件图片上传#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Configuring Multiple File Image Upload”。中文学习稿把它作为“配置多文件图片上传”来阅读:确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。

源文重点:本节重点是 Image Upload 页面项和 Form 区域如何协同保存图片 BLOB,同时控制裁剪、缩放、预览、允许类型和大小限制。

阅读时重点跟踪这些对象和概念:Image Upload、APEX_APPLICATION_TEMP_FILES。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.1 配置多文件图片上传”,说明它解决的核心问题是确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.8.2.1 配置多文件图片上传”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Image Upload 页面项的来源、存储列、预览行为、限制条件和提交处理是否一致。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-64 配置多文件图片上传:官方捕获图片 1

16.8.2.2 体验发布多张照片流程#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Experiencing Post Multiple Photos Flow”。中文学习稿把它作为“体验发布多张照片流程”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Image Upload、Interactive Grid。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.2 体验发布多张照片流程”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.8.2.2 体验发布多张照片流程”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-65 体验发布多张照片流程:官方捕获图片 1
图 16-66 体验发布多张照片流程:官方捕获图片 2
图 16-67 体验发布多张照片流程:官方捕获图片 3

16.8.2.3 使用 Collection 捕获图片标题#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Using a Collection to Capture Image Titles”。中文学习稿把它作为“使用 Collection 捕获图片标题”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:APEX_APPLICATION_TEMP_FILES、Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.3 使用 Collection 捕获图片标题”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.3 使用 Collection 捕获图片标题”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.8.2.4 将 Collection 与临时文件表连接#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Joining Collection with Temp Files Table”。中文学习稿把它作为“将 Collection 与临时文件表连接”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:APEX_APPLICATION_TEMP_FILES、Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.4 将 Collection 与临时文件表连接”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.4 将 Collection 与临时文件表连接”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

create view eba_demo_woodshr_temp_photos as
with session_state as (
    select /*+ NO_MERGE */
           nv('G_APP_USER_EMPNO') as empno,
           nv('APP_ID')           as current_app_id
      from dual
)
select atf.name as unique_file_name,
       sst.empno,
       atf.mime_type,
       atf.filename,
       col.c002 as title,
       atf.blob_content as photo
  from session_state sst
  join apex_collections col
    on col.collection_name = 'UPLOADED_PHOTOS'
  join apex_application_temp_files atf
    on atf.name = col.c001 /* Join on Unique File Name */
   and atf.application_id = sst.current_app_id
图 16-68 将 Collection 与临时文件表连接:官方捕获图片 1

16.8.2.5 准备并保存带标题的图片#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Preparing and Saving Images with Titles”。中文学习稿把它作为“准备并保存带标题的图片”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Collection、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5 准备并保存带标题的图片”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.8.2.5 准备并保存带标题的图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.9.6.1 用 Content Row 显示 Bucket 文件#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Displaying Bucket Files with Content Row”。中文学习稿把它作为“用 Content Row 显示 Bucket 文件”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:Content Row、REST、REST Data Source、Bucket。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.6.1 用 Content Row 显示 Bucket 文件”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.6.1 用 Content Row 显示 Bucket 文件”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-69 用 Content Row 显示 Bucket 文件:官方捕获图片 1

16.9.6.2 为 Bucket 文件配置 Content Row#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Configuring Content Row for Bucket Files”。中文学习稿把它作为“为 Bucket 文件配置 Content Row”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:Content Row、REST、REST Data Source、Bucket。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.6.2 为 Bucket 文件配置 Content Row”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.6.2 为 Bucket 文件配置 Content Row”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-70 为 Bucket 文件配置 Content Row:官方捕获图片 1
图 16-71 为 Bucket 文件配置 Content Row:官方捕获图片 2

16.9.6.3 使用 SQL 表达式增强 REST 数据#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Enhancing REST Data with SQL Expressions”。中文学习稿把它作为“使用 SQL 表达式增强 REST 数据”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:PDF、x01、Checksum、URL、REST、REST Data Source、Bucket、SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.6.3 使用 SQL 表达式增强 REST 数据”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.6.3 使用 SQL 表达式增强 REST 数据”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

case lower(substr(name, instr(name,'.',-1)+1))
  when 'pdf'  then 'PDF Document'
  when 'jpg'  then 'JPEG Image'
  when 'jpeg' then 'JPEG Image'
  when 'png'  then 'PNG Image'
  when 'gif'  then 'GIF Image'
  when 'txt'  then 'Text File'
  when 'zip'  then 'ZIP Archive'
  when 'csv'  then 'CSV File'
  when 'doc'  then 'Word Document'
  when 'docx' then 'Word Document'
  when 'xls'  then 'Excel Spreadsheet'
  when 'xlsx' then 'Excel Spreadsheet'
  when 'ppt' then 'PowerPoint Presentation'
  when 'pptx' then 'PowerPoint Presentation'
  else 'Other'
end

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

apex_string_util.to_display_filesize( FILE_SIZE )

源示例 3:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

apex_page.get_url(
   p_page         => 9003,
   p_x01          => NAME,
   p_absolute_url => true,
   p_plain_url    => true)
图 16-72 使用 SQL 表达式增强 REST 数据:官方捕获图片 1

16.9.6.4 定义并使用全局替换值#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Defining and Using Global Substitutions”。中文学习稿把它作为“定义并使用全局替换值”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:REST、REST Data Source、Bucket。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.6.4 定义并使用全局替换值”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.9.6.4 定义并使用全局替换值”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-73 定义并使用全局替换值:官方捕获图片 1
图 16-74 定义并使用全局替换值:官方捕获图片 2

16.9.6.5 配置选择、分页和头像#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Configuring Selection, Paging, and Avatar”。中文学习稿把它作为“配置选择、分页和头像”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Page Item、Content Row、URL、Bucket。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.6.5 配置选择、分页和头像”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.9.6.5 配置选择、分页和头像”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-75 配置选择、分页和头像:官方捕获图片 1

16.9.8.1 理解 Object Bucket 可见性#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Understanding Object Bucket Visibility”。中文学习稿把它作为“理解 Object Bucket 可见性”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:OCI、Object Bucket、Bucket、Pre-Authenticated Request (PAR)。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.8.1 理解 Object Bucket 可见性”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Shared Components / Web Credentials / REST Data Sources / 页面区域属性。
  • 操作:根据本节主题“16.9.8.1 理解 Object Bucket 可见性”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-76 理解 Object Bucket 可见性:官方捕获图片 1

16.9.8.2 创建 Pre-Authenticated Requests#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Creating Pre-Authenticated Requests”。中文学习稿把它作为“创建 Pre-Authenticated Requests”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:URL、REST、REST Data Source、Bucket、Pre-Authenticated Request (PAR)、PAR。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.8.2 创建 Pre-Authenticated Requests”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.9.8.2 创建 Pre-Authenticated Requests”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/x1y2z3a4b5c6/b/companion-bucket/p/

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- In package eba_demo_woodshr_oci
-------------------------------------------------------------------------------
-- Create a short-lived PAR (per object) and return URL + expiry.
-------------------------------------------------------------------------------
procedure create_object_par(
    p_bucket_name         in  varchar2,
    p_file_name           in  varchar2,
    p_ttl_seconds         in  pls_integer default 120,
    p_par_url             out varchar2,
    p_expires_utc         out timestamp with time zone,
    p_module_static_id    in  varchar2 default 'bucket_objects',
    p_operation_static_id in  varchar2 default 'get_file_par')
is
    l_url         varchar2(32767);
    l_cred        varchar2(4000);
    l_body        clob;
    l_resp        clob;
    l_access_uri  varchar2(32767);
    l_full_path   varchar2(32767);
    l_host        varchar2(1024);
    l_expires_str varchar2(64);
    l_resp_json   json_object_t;
begin
    bucket_url_for(
        p_module_static_id     => p_module_static_id,
        p_operation_static_id  => p_operation_static_id,
        p_bucket_name          => p_bucket_name,
        p_file_name            => p_file_name,
        p_credential_static_id => l_cred,
        p_file_url             => l_url);

    -- Compute expiration date by adding p_ttl_second to
    -- systimestamp and formatting using ISO 8601 for REST payload
    p_expires_utc := (systimestamp at time zone 'UTC')
                     + numtodsinterval(greatest(p_ttl_seconds, 1), 'SECOND');
    l_expires_str := to_char(p_expires_utc, 'YYYY-MM-DD"T"HH24:MI:SS"Z"');

    -- Build the JSON payload to send in the Create PAR request body
    select json_object(
             'name'        value ('par-'||replace(p_file_name,'/','_')),
             'accessType'  value 'ObjectRead',
             'objectName'  value p_file_name,
             'timeExpires' value l_expires_str
           returning clob)
      into l_body
      from dual;

    apex_web_service.set_request_headers(
        p_name_01 => 'Content-Type', p_value_01 => 'application/json',
        p_name_02 => 'Accept',       p_value_02 => 'application/json',
        p_reset   => true);

    l_resp := apex_web_service.make_rest_request(
                p_credential_static_id => l_cred,
                p_http_method          => 'POST',
                p_url                  => l_url,
                p_body                 => l_body);

    if apex_web_service.g_status_code not in (200,201) then
        raise_application_error(-20001,
            'Create PAR failed: HTTP '||apex_web_service.g_status_code);
    end if;

    l_resp_json  := json_object_t(l_resp);
    l_access_uri := l_resp_json.get_string('accessUri');
    l_full_path  := l_resp_json.get_string('fullPath');

    if l_full_path is not null then
        p_par_url := l_full_path;
    elsif l_access_uri is not null then
        l_host := regexp_substr(l_url, '^https?://[^/]+');
        p_par_url := case when substr(l_access_uri,1,1)='/' then l_host||l_access_uri
                          else l_access_uri end;
    else
        raise_application_error(-20001,
            'Create PAR failed: neither accessUri nor fullPath returned');
    end if;
end create_object_par;
图 16-77 创建 Pre-Authenticated Requests:官方捕获图片 1

16.9.8.3 使用 Pre-Authenticated Requests#

这一组主题把文件存储扩展到 OCI Object Storage,说明 Bucket URL、Web Credential、REST Data Source、Content Row 和 Pre-Authenticated Request 的关系。

本节对应官方主题“Using Pre-Authenticated Requests”。中文学习稿把它作为“使用 Pre-Authenticated Requests”来阅读:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。

源文重点:本节重点是通过 OCI Web Credential 和 REST Data Source 访问 Object Storage,并在需要临时浏览器访问时使用最小范围、短有效期的 PAR。

阅读时重点跟踪这些对象和概念:URL、OCI、Object Bucket、Bucket、Pre-Authenticated Request (PAR)、PAR。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.9.8.3 使用 Pre-Authenticated Requests”,说明它解决的核心问题是确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.9.8.3 使用 Pre-Authenticated Requests”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认 Object Storage 对象如何通过 APEX 凭据、REST 数据源和临时访问 URL 被访问。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-78 使用 Pre-Authenticated Requests:官方捕获图片 1

16.4.7.5.1 理解使用 X01 的影响#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Understanding Implications of Using X01”。中文学习稿把它作为“理解使用 X01 的影响”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:Page Item、x01、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.5.1 理解使用 X01 的影响”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.4.7.5.1 理解使用 X01 的影响”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.4.7.5.2 使用受保护页面项下载图片#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Downloading Image with Secure Page Item”。中文学习稿把它作为“使用受保护页面项下载图片”来阅读:确认下载动作返回正确文件、正确文件名和正确授权边界。

源文重点:本节重点是下载动作所需的 SQL 返回值,包括 BLOB 内容、文件名、MIME 类型,以及多文件打包时的结果集结构。

阅读时重点跟踪这些对象和概念:Page Item、Checksum、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.5.2 使用受保护页面项下载图片”,说明它解决的核心问题是确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Download 动作。
  • 操作:根据本节主题“16.4.7.5.2 使用受保护页面项下载图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认下载动作返回正确文件、正确文件名和正确授权边界。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-79 使用受保护页面项下载图片:官方捕获图片 1
图 16-80 使用受保护页面项下载图片:官方捕获图片 2

16.4.7.5.3 使用受保护项生成图片 URL#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Generating Image URL with Secure Item”。中文学习稿把它作为“使用受保护项生成图片 URL”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:Page Item、Interactive Grid、x01、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.5.3 使用受保护项生成图片 URL”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.4.7.5.3 使用受保护项生成图片 URL”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select id,
       title,
       case
           when     image is not null
                and dbms_lob.getlength(image) > 0
           then apex_string.format('<img alt="%s" title="%s" src="assets/images/oracle-apex-26.1/e4843f1f016e0ce9.bin" data-original-src="https://docs.oracle.com/en/database/oracle/apex/26.1/apxdc/%s">',
                apex_escape.html_attribute(title),
                apex_escape.html_attribute(title),
                apex_page.get_url(
                    p_page   => 9005,
                    p_items  => 'P9005_ID',
                    p_values => ID))
       end as image,
       file_name,
       posted,
       posted_by,
       updated
from eba_demo_emp_breakroom_photo_v

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

apex_page.get_url(
    p_page   => 9005,
    p_items  => 'P9005_ID1,P9005_ID2',
    p_values => ID1||','||ID2)

16.4.7.5.4 体验 URL 校验和保护#

这一组主题关注 BLOB 图片的显示与安全访问,包括报表、卡片、表单、搜索结果、交互式网格以及受保护的图片 URL。

本节对应官方主题“Experiencing URL Checksum Protection”。中文学习稿把它作为“体验 URL 校验和保护”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是 BLOB 图片显示和 URL 生成的安全边界,避免只依赖可猜或未保护的客户端参数读取文件。

阅读时重点跟踪这些对象和概念:Page Item、Interactive Grid、Checksum、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.4.7.5.4 体验 URL 校验和保护”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.4.7.5.4 体验 URL 校验和保护”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

⋯/woods-hr/get-breakroom-image?p9005_id=13&session=304⋯573&cs=1kSRFy⋯rUoqRt
图 16-81 体验 URL 校验和保护:官方捕获图片 1
图 16-82 体验 URL 校验和保护:官方捕获图片 2

16.5.2.1.1 在服务器端生成对话框 URL#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Generating Dialog URL on the Server”。中文学习稿把它作为“在服务器端生成对话框 URL”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:JavaScript、Checksum、URL、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.1.1 在服务器端生成对话框 URL”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2.1.1 在服务器端生成对话框 URL”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

:P29_MODAL_PAGE_URL :=
    apex_page.get_url(
        p_page      => 31,
        p_items     => 'P31_JOB_ID',
        p_values    => :P29_SELECTED_JOB_ID,
        p_plain_url => true);
图 16-83 在服务器端生成对话框 URL:官方捕获图片 1

16.5.2.1.2 打开传入客户端数据的对话框 URL#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Opening Dialog URL Passing Client Data”。中文学习稿把它作为“打开传入客户端数据的对话框 URL”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:JavaScript、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.1.2 打开传入客户端数据的对话框 URL”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2.1.2 打开传入客户端数据的对话框 URL”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

app.openDrawerURL({
    url:   $v('P29_MODAL_PAGE_URL'),
    title: "Submit New Referral"
});

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

app.openDialogURL({
    url:   $v('P29_MODAL_PAGE_URL'),
    title: "Submit New Referral"
});

源示例 3:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

// In app.js static application file
//----------------------------------------------------
// Open modal dialog
//----------------------------------------------------
function openDialogURL({
    url,
    title,
    width = 400,
    maxWidth = 1000,
    triggeringElement = $('body')[0]
}) {
    apex.navigation.dialog(
    url,
    {
        title: title,
        height: "auto",
        width: width,
        maxWidth: maxWidth,
        modal: true,
        resizable: true
    },
    "t-Dialog-page--standard",
    triggeringElement
    );
}

//----------------------------------------------------
// Open Drawer URL
//----------------------------------------------------
function openDrawerURL({
    url,
    title,
    width = 400,
    triggeringElement = $('body')[0]
}) {
    apex.navigation.dialog(
    url,
    {
        title: title,
        width: width,
        modal: true
    },
    "t-Drawer-page--standard t-Drawer--pullOutEnd",
    triggeringElement
    );
}
图 16-84 打开传入客户端数据的对话框 URL:官方捕获图片 1

16.5.2.2.1 为 URL Template 页面项设置默认值#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Defaulting URL Template Page Items”。中文学习稿把它作为“为 URL Template 页面项设置默认值”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Page Item、JavaScript、URL、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.2.1 为 URL Template 页面项设置默认值”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.5.2.2.1 为 URL Template 页面项设置默认值”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

apex_page.get_url(
    p_page      => 23,
    p_items     => 'P23_JOB_ID',
    p_values    => '$P11_SELECTED_JOB_ID$',
    p_plain_url => true)

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

apex_page.get_url(
    p_page      => 27,
    p_items     => 'P27_JOB_ID',
    p_values    => '$P11_SELECTED_JOB_ID$',
    p_plain_url => true)

源表格 3:表格结构按源页面保留,列名和配置值不改写,避免影响与 APEX UI 的对照。

ApproachUse When You Need
Default setting An initial value if the page item is otherwise null.
Source setting A computed value to always be used, when not associated to a form region.
Computation or page process assignment in the Pre-Rendering section An optionally-conditional assignment visible at the "top" of the page rendering tree.
图 16-85 为 URL Template 页面项设置默认值:官方捕获图片 1
图 16-86 为 URL Template 页面项设置默认值:官方捕获图片 2

16.5.2.2.2 在对话框 URL 中替换客户端数据#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Substituting Client-Side Data in Dialog URL”。中文学习稿把它作为“在对话框 URL 中替换客户端数据”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:JavaScript、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.2.2 在对话框 URL 中替换客户端数据”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2.2.2 在对话框 URL 中替换客户端数据”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

function makeDialogURL(url) {
    // replace unicode escapes like \u00e9
    url = url.replace(/\\u([0-9a-fA-F]{4})/g, (_, h) =>
        String.fromCharCode(parseInt(h, 16))
    );

    // Replace %24Pnn_SOMENAME%24 with encodeURIComponent($v('Pnn_SOMENAME'))
    // Regex finds %24<identifier>%24 where identifier = letters, digits, underscore
    url = url.replace(/%24([A-Za-z0-9_]+)%24/g, function (_, p1) {
        const val = $v(p1);
        return encodeURIComponent(val != null ? val : "");
    });

    return url;
}

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

// In app.js static application file
//----------------------------------------------------
// Substitute $PNN_NAME$ placeholders and open modal dialog
//----------------------------------------------------
function openDialogURLWithClientPageItemPlaceholders({
    urlTemplate,
    title,
    width = 400,
    maxWidth = 1000,
    triggeringElement = $('body')[0]
}) {
    openDialogURL({
        url : makeDialogURL(urlTemplate),
        title: title,
        height: height,
        width: width,
        maxWidth: maxWidth,
        triggeringElement : triggeringElement
    });
}

源示例 3:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

// In app.js static application file
//----------------------------------------------------
// Substitute $PNN_NAME$ placeholders and open drawer
//----------------------------------------------------
function openDrawerURLWithClientPageItemPlaceholders({
    urlTemplate,
    title,
    width = 400,
    triggeringElement = $('body')[0]
}) {
    openDrawerURL({
        url : makeDialogURL(urlTemplate);
        title: title,
        width: width,
        triggeringElement : triggeringElement
    });
}

源示例 4:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

// Export single global symbol "app" to keep code clean
const app = (function ($) {

    // --- Private Functions ---

    function makeDialogURL(url) {
        // replace unicode escapes like \u00e9
        url = url.replace(/\\u([0-9a-fA-F]{4})/g, (_, h) =>
            String.fromCharCode(parseInt(h, 16))
        );

        // Replace %24Pnn_SOMENAME%24 with encodeURIComponent($v('Pnn_SOMENAME'))
        // Regex finds %24<identifier>%24 where identifier = letters, digits, underscore
        url = url.replace(/%24([A-Za-z0-9_]+)%24/g, function (_, p1) {
            const val = $v(p1);
            return encodeURIComponent(val != null ? val : "");
        });

        return url;
    }

    // --- Public Functions (returned below!) ---

    //----------------------------------------------------
    // Set the title of the current dialog window
    //----------------------------------------------------
    function setDialogTitle(title) {
        apex.util.getTopApex()
        .jQuery(".ui-dialog-content")
        .dialog("option", "title", title);
    }

    //----------------------------------------------------
    // Return true if x and y are different, treating null
    // and empty string as equivalent in the comparison
    //----------------------------------------------------
    function areDifferent(x, y) {
        return (x || '') !== (y || '');
    }

    //----------------------------------------------------
    // Open modal dialog
    //----------------------------------------------------
    function openDialogURL({
        url,
        title,
        width = 400,
        maxWidth = 1000,
        triggeringElement = $('body')[0]
    }) {
        apex.navigation.dialog(
        url,
        {
            title: title,
            height: "auto",
            width: width,
            maxWidth: maxWidth,
            modal: true,
            resizable: true
        },
        "t-Dialog-page--standard",
        triggeringElement
        );
    }

    //----------------------------------------------------
    // Open Drawer URL
    //----------------------------------------------------
    function openDrawerURL({
        url,
        title,
        width = 400,
        triggeringElement = $('body')[0]
    }) {
        apex.navigation.dialog(
        url,
        {
            title: title,
            width: width,
            modal: true
        },
        "t-Drawer-page--standard t-Drawer--pullOutEnd",
        triggeringElement
        );
    }

    //----------------------------------------------------
    // Substitute $PNN_NAME$ placeholders and open modal dialog
    //----------------------------------------------------
    function openDialogURLWithClientPageItemPlaceholders({
        urlTemplate,
        title,
        width = 400,
        maxWidth = 1000,
        triggeringElement = $('body')[0]
    }) {
        openDialogURL({
            url : makeDialogURL(urlTemplate),
            title: title,
            height: height,
            width: width,
            maxWidth: maxWidth,
            triggeringElement : triggeringElement
        });
    }

    //----------------------------------------------------
    // Substitute $PNN_NAME$ placeholders and open drawer
    //----------------------------------------------------
    function openDrawerURLWithClientPageItemPlaceholders({
        urlTemplate,
        title,
        width = 400,
        triggeringElement = $('body')[0]
    }) {
         openDrawerURL({
            url : makeDialogURL(urlTemplate),
            title: title,
            width: width,
            triggeringElement : triggeringElement
        });
    }

    // Only these functions are exposed to JavaScript code
    // in APEX pages; everything else stays private.
    return {
        setDialogTitle,
        areDifferent,
        openDialogURL,
        openDrawerURL,
        openDrawerURLWithClientPageItemPlaceholders,
        openDialogURLWithClientPageItemPlaceholders
    };

  // Ensure $ in app namespace resolves to correct jQuery
})(apex.jQuery);

16.5.2.2.3 打开对话框并传入客户端数据#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Opening Dialog, Passing Client-Side Data”。中文学习稿把它作为“打开对话框并传入客户端数据”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:JavaScript、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.2.3 打开对话框并传入客户端数据”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2.2.3 打开对话框并传入客户端数据”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

app.openDrawerURLWithClientPageItemPlaceholders({
    urlTemplate: $v('P11_DRAWER_MODAL_URL_TEMPLATE'),
    title:       "Submit New Referral"
});

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

app.openDialogURLWithClientPageItemPlaceholders({
    urlTemplate: $v('P11_DIALOG_MODAL_URL_TEMPLATE'),
    title:       "Submit New Referral"
});
图 16-87 打开对话框并传入客户端数据:官方捕获图片 1

16.5.2.2.4 取消动态客户端参数保护#

这一组主题围绕普通文件上传和职位推荐 CV,重点是对话框传参、File Upload 页面项、自动 DML 处理和运行时提交体验。

本节对应官方主题“Unprotecting Dynamic Client Arguments”。中文学习稿把它作为“取消动态客户端参数保护”来阅读:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。

源文重点:本节重点是页面间传值和对话框打开方式,尤其是服务器生成 URL、客户端替换值、校验和 Session State Protection 的取舍。

阅读时重点跟踪这些对象和概念:Session State、Checksum、URL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.5.2.2.4 取消动态客户端参数保护”,说明它解决的核心问题是确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Dynamic Actions / Dialog 页面项 / Session State Protection。
  • 操作:根据本节主题“16.5.2.2.4 取消动态客户端参数保护”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认对话框打开前后的页面项传值、校验和 Session State Protection 是否匹配。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-88 取消动态客户端参数保护:官方捕获图片 1
图 16-89 取消动态客户端参数保护:官方捕获图片 2

16.8.2.5.1 在包中组织应用逻辑#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Organizing Application Logic in a Package”。中文学习稿把它作为“在包中组织应用逻辑”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.1 在包中组织应用逻辑”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.8.2.5.1 在包中组织应用逻辑”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源表格 1:表格结构按源页面保留,列名和配置值不改写,避免影响与 APEX UI 的对照。

NamePurpose
UPLOADED_BREAKROOM_PHOTOSReturns true if user has any pending uploaded photos.
WIPE_UPLOADED_BREAKROOM_PHOTOSClears out UPLOADED_PHOTOS collection
PREP_UPLOADED_BREAKROOM_PHOTOSAdds unique uploaded file name for uploaded photos to a collection in preparation for collecting a corresponding title for each one.
DOWNLOAD_UPLOADED_TEMPORARY_PHOTOServes temporary uploaded image as inline data for previewing in the grid.
SEQ_ID_FOR_UNIQUE_FILENAMELooks up the collection sequence id for the row having the unique file name value passed in.
SAVE_UPLOADED_BREAKROOM_PHOTOSStores uploaded images and titles in break room photos table.

16.8.2.5.2 清空 Collection 以启动流程#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Clearing Collection to Start the Process”。中文学习稿把它作为“清空 Collection 以启动流程”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Interactive Grid、Collection、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.2 清空 Collection 以启动流程”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.5.2 清空 Collection 以启动流程”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

:P17_CLEAR = 'Y' or not eba_demo_woodshr_file.uploaded_breakroom_photos

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- in package eba_demo_woodshr_file
function uploaded_breakroom_photos
return boolean
is
begin
    for j in (select 1
                from eba_demo_woodshr_temp_photos
              fetch first row only)
    loop
        return true;
    end loop;
    return false;
end uploaded_breakroom_photos;

源示例 3:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

:P17_CLEAR = 'Y' or not eba_demo_woodshr_file.uploaded_breakroom_photos

源示例 4:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- in package eba_demo_woodshr_file
procedure wipe_uploaded_breakroom_photos
is
begin
    -- Delete any referenced temporary images
    delete from apex_application_temp_files
    where name in (select unique_file_name
                     from eba_demo_woodshr_temp_photos);
    -- Clear the collection
    apex_collection.create_or_truncate_collection(c_uploaded_photos_collection);
end wipe_uploaded_breakroom_photos;
图 16-90 清空 Collection 以启动流程:官方捕获图片 1
图 16-91 清空 Collection 以启动流程:官方捕获图片 2
图 16-92 清空 Collection 以启动流程:官方捕获图片 3

16.8.2.5.3 准备 Collection 以录入照片标题#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Preparing Collection to Enter Photo Titles”。中文学习稿把它作为“准备 Collection 以录入照片标题”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Image Upload、Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.3 准备 Collection 以录入照片标题”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.5.3 准备 Collection 以录入照片标题”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- in package eba_demo_woodshr_file
procedure prep_uploaded_breakroom_photos(
    p_unique_file_names in varchar2)
is
begin
    for j in (select column_value as unique_file_name
                from apex_string.split(p_unique_file_names,':'))
    loop
        apex_collection.add_member(
            p_collection_name => c_uploaded_photos_collection,
            p_c001            => j.unique_file_name);
    end loop;
end prep_uploaded_breakroom_photos;
图 16-93 准备 Collection 以录入照片标题:官方捕获图片 1
图 16-94 准备 Collection 以录入照片标题:官方捕获图片 2

16.8.2.5.4 在网格中预览图片并录入标题#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Previewing Images in a Grid to Enter Titles”。中文学习稿把它作为“在网格中预览图片并录入标题”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:APEX_APPLICATION_TEMP_FILES、Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4 在网格中预览图片并录入标题”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.5.4 在网格中预览图片并录入标题”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.8.2.5.4.1 根据 Collection 内容切换界面#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Toggling UI Based on Collection Contents”。中文学习稿把它作为“根据 Collection 内容切换界面”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Image Upload、Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.1 根据 Collection 内容切换界面”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.5.4.1 根据 Collection 内容切换界面”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

not eba_demo_woodshr_file.uploaded_breakroom_photos

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

eba_demo_woodshr_file.uploaded_breakroom_photos
图 16-95 根据 Collection 内容切换界面:官方捕获图片 1

16.8.2.5.4.2 内联提供临时图片用于预览#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Serving Inline Temp Images for Preview”。中文学习稿把它作为“内联提供临时图片用于预览”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:BLOB、Interactive Grid、URL、APEX_APPLICATION_TEMP_FILES。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.2 内联提供临时图片用于预览”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.8.2.5.4.2 内联提供临时图片用于预览”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- in package eba_demo_woodshr_file
procedure download_uploaded_temporary_photo(
    p_unique_filename in varchar2)
is
    l_file_blob apex_application_temp_files.blob_content%type;
    l_mime_type varchar2(255);
begin
    select blob_content, mime_type
      into l_file_blob, l_mime_type
      from apex_application_temp_files
     where name = p_unique_filename;

apex_http.download (
    p_blob         => l_file_blob,
    p_content_type => l_mime_type,
    p_is_inline    => true );

end download_uploaded_temporary_photo;

16.8.2.5.4.3 在网格中输入图片标题#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Entering Images Titles in a Grid”。中文学习稿把它作为“在网格中输入图片标题”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:x01。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.3 在网格中输入图片标题”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.5.4.3 在网格中输入图片标题”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

select  unique_file_name,
        case
            when     photo is not null
                 and dbms_lob.getlength(photo) > 0
            then apex_string.format('<img src="assets/images/oracle-apex-26.1/e4843f1f016e0ce9.bin" data-original-src="https://docs.oracle.com/en/database/oracle/apex/26.1/apxdc/%s">',
                 apex_page.get_url(
                    p_page => 9004,
                    p_x01  => unique_file_name,
                    p_plain_url => true))
        end as image,
        title
  from eba_demo_woodshr_temp_photos
图 16-96 在网格中输入图片标题:官方捕获图片 1

16.8.2.5.4.4 让查询得到的空标题触发必填校验#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Invalidating Required Queried-Null Titles”。中文学习稿把它作为“让查询得到的空标题触发必填校验”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Interactive Grid、JavaScript。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.4 让查询得到的空标题触发必填校验”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.8.2.5.4.4 让查询得到的空标题触发必填校验”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

// Run by Selection Changed [Interactive Grid]
// dynamic action event handler
const model = apex.region("addPhotoTitles")
                  .widget()
                  .interactiveGrid("getViews","grid")
                  .model;

model.forEach(function (rec) {
    const titleVal = model.getValue(rec, "TITLE");
    if (titleVal === null || titleVal === "") {
        // Dirty the TITLE so IG will validate on Save
        model.setValue(rec, "TITLE", " ", true);
        model.setValue(rec, "TITLE", titleVal, true);
    }
});

16.8.2.5.4.5 保存已发布的带标题图片#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Saving the Posted Images with Titles”。中文学习稿把它作为“保存已发布的带标题图片”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:DML、Interactive Grid、Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.5 保存已发布的带标题图片”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Items / Regions / Processes / Report Attributes。
  • 操作:根据本节主题“16.8.2.5.4.5 保存已发布的带标题图片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

16.8.2.5.4.5.1 将网格更新写回 Collection#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Writing Grid Updates to Collection”。中文学习稿把它作为“将网格更新写回 Collection”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Automatic Row Processing (DML)、DML、Interactive Grid、Collection、SQL、PL/SQL。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.5.1 将网格更新写回 Collection”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.5.4.5.1 将网格更新写回 Collection”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- Handler code for Grid DML with custom PL/SQL processing
declare
  l_seq_id number := eba_demo_woodshr_file.seq_id_for_unique_filename(:UNIQUE_FILE_NAME);
begin
    if l_seq_id is not null then
        case :APEX$ROW_STATUS
        when 'U' then
            apex_collection.update_member_attribute(
                p_collection_name => eba_demo_woodshr_file.uploaded_breakroom_photos_coll,
                p_seq             => l_seq_id,
                p_attr_number     => 2,
                p_attr_value      => :TITLE);
        when 'D' then
            apex_collection.delete_member(
                p_collection_name => eba_demo_woodshr_file.uploaded_breakroom_photos_coll,
                p_seq             => l_seq_id);
        end case;
    end if;
end;

源示例 2:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- in package eba_demo_woodshr_file
function seq_id_for_unique_filename(
    p_unique_filename in varchar2)
return number
is
begin
    for j in (select seq_id
                from apex_collections
               where collection_name = c_uploaded_photos_collection
                 and c001 /* unique_file_name */ = p_unique_filename)
    loop
        return j.seq_id;
    end loop;
    return null;
end seq_id_for_unique_filename;
图 16-97 将网格更新写回 Collection:官方捕获图片 1

16.8.2.5.4.5.2 插入带标题的照片#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Inserting Photos with Titles”。中文学习稿把它作为“插入带标题的照片”来阅读:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。

源文重点:本节重点是把官方页面中的配置、处理、代码和运行时验证串成一个可复现的小步骤。

阅读时重点跟踪这些对象和概念:Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.5.2 插入带标题的照片”,说明它解决的核心问题是确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:APEX Builder / Page Designer / Shared Components / SQL Workshop。
  • 操作:根据本节主题“16.8.2.5.4.5.2 插入带标题的照片”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认官方步骤中的页面对象、属性设置、代码片段和运行结果能够在个人 APEX 工作区复现。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。

技术示例:以下代码或表格来自捕获源页面,保留原有标识符、页面项名、SQL、PL/SQL、JavaScript、URL 和配置值;正文解释使用中文,示例本身保持可复制。

源示例 1:代码按官方示例保留,便于复制到 SQL Workshop、页面处理、动态操作或命令行中核对。

-- in package eba_demo_woodshr_file
procedure save_uploaded_breakroom_photos
is
begin
    insert into eba_demo_emp_breakroom_photos(
           empno,
           mime_type,
           file_name,
           title,
           image)
    select empno,
           mime_type,
           filename,
           title,
           photo
      from eba_demo_woodshr_temp_photos;
end save_uploaded_breakroom_photos;
图 16-98 插入带标题的照片:官方捕获图片 1

16.8.2.5.4.5.3 完成后清空 Collection#

这一组主题关注临时上传文件和多文件上传,尤其是 APEX_APPLICATION_TEMP_FILES、Collection、交互式网格补录元数据以及最终保存流程。

本节对应官方主题“Clearing Collection When Done”。中文学习稿把它作为“完成后清空 Collection”来阅读:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。

源文重点:本节重点是多文件上传先进入临时文件表,再通过 Collection 或处理流程补充元数据并保存到业务表。

阅读时重点跟踪这些对象和概念:Collection。对初学者来说,重点不是记住单个按钮,而是确认文件从浏览器进入 APEX 后,在哪个表、页面项、临时区、REST 调用或对象存储中被持久化,并在读取或下载前经过哪一层权限检查。

  • 理解目标:围绕“16.8.2.5.4.5.3 完成后清空 Collection”,说明它解决的核心问题是确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 定位对象:在 APEX Builder 中找到本节涉及的页面项、区域、处理、共享组件、SQL、PL/SQL、REST Data Source 或安全属性。
  • 操作路径:先对照官方步骤检查属性,再运行页面上传、预览或下载一个最小样例文件,观察文件名、MIME 类型、主键和权限状态。
  • 验证结果:能够说清文件内容、元数据、业务记录和访问控制之间的关系。

学习验证

  • 前提:拥有可实验的 APEX 工作区、Woods HR 示例数据,以及可上传的图片、PDF 或普通文件样例。
  • APEX 区域:Page Designer / Processing / APEX Collections / Interactive Grid。
  • 操作:根据本节主题“16.8.2.5.4.5.3 完成后清空 Collection”定位对应页面、组件、处理或代码,完成一次最小复现。
  • 检查点:确认临时文件、Collection 和最终业务表之间的数据流是否清晰可验证。
  • 预期结果:运行时行为与官方页面描述一致,并且能解释失败时应检查的页面项、会话状态、DML、响应头、凭据或授权配置。
图 16-99 完成后清空 Collection:官方捕获图片 1