You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PLSQL向Oracle Object Storage上传带前缀的对象

OCI对象存储PL/SQL上传带前缀对象问题解答

问题答复

  • 带前缀对象上传实现:OCI对象存储中,前缀是对象名(Object Name)的组成部分,不需要调用额外接口,直接将目标前缀拼接在原始文件名前方,整体做URL编码后放入PutObject接口的请求路径即可。
  • 前缀预创建说明:无需提前创建对应前缀。OCI对象存储为扁平存储架构,不存在实体目录/文件夹结构,控制台展示的层级目录是根据对象名中的/分隔符虚拟生成的。上传对象时只要对象名包含前缀路径,服务端会自动完成虚拟路径的匹配展示,不需要提前执行任何创建操作。

代码调整参考

你现有代码仅需要修改对象名拼接逻辑即可实现带前缀上传,核心调整点是在文件名前拼接目标前缀后再做URL编码,调整后完整代码示例:

declare
l_request_url varchar2(32767);
l_content_length number;
l_response clob;
upload_failed_exception exception;
l_request_object blob;
l_request_filename varchar2(500);
-- 可根据业务传入前缀,例如此处取页面项存储的前缀值,格式类似 "report/2024/09/"
l_object_prefix varchar2(500) := :P2_TARGET_PREFIX;
begin
  select blob_content, filename 
  into l_request_object, l_request_filename 
  from apex_application_temp_files 
  where name = :P2_FILE;

  -- 拼接前缀+文件名后统一做URL编码,生成带前缀的对象请求路径
  l_request_url := :G_BASE_URL || 'b/' || :P2_BUCKET_NAME || '/o/'  
    || apex_util.url_encode(l_object_prefix || l_request_filename);

  l_response := apex_web_service.make_rest_request(
      p_url => l_request_url
      , p_http_method => 'PUT'
      , p_body_blob => l_request_object
      , p_credential_static_id => 'OCI API Access'
  );

  -- 建议补充响应状态校验,非200成功状态直接抛出异常
  if apex_web_service.g_status_code != 200 then
    raise upload_failed_exception;
  end if;
end;

注意:前缀值需要以/结尾,例如目标层级为contract/finance/,不要省略末尾的斜杠,否则前缀会和文件名连为一体,无法生成预期的目录层级展示。

内容的提问来源于stack exchange,提问作者Android

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:42:28