如何使用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
相关产品推荐
相关产品推荐

