ORACLE APEX 网络服务 p_body_blob

ORACLE APEX web service p_body_blob

我正在寻找将请求正文中的 json 文件传递​​给 apex_web_service.make_rest_request 的示例 有人可以给我举个例子吗?

谢谢, 路

我看到两种通过 apex_web_service.make_rest_request 发送文件的方法。在我的示例中,我使用了从 table SAMPLE_TABLEBLOB_LOGO.[= 检索到的图像文件 blob 13=]

选项 1:

将查询中的文件 blob 类型直接缓存到 blob 对象中,并通过 p_body_blob 参数

发送
DECLARE 
    obj_sample SAMPLE_TABLE%ROWTYPE;     
    file_blob blob;
    l_response clob;
BEGIN 
    -- query
    select * INTO obj_sample 
    from SAMPLE_TABLE where ID = 123;

    -- file as blob
    file_blob := obj_sample.BLOB_LOGO; 

    l_response   := apex_web_service.make_rest_request(
        p_url           => 'url/to/api/',
        p_http_method   => 'POST',
        p_body_blob     => file_blob,
        p_proxy_override => 'url/to/proxy'
    );
    dbms_output.put_line(l_response);
END;

选项 2:

首先将文件 blob 数据类型转换为 base64 clob 对象,并通过 p_body 参数将其作为 json body (clob) 发送

DECLARE 
    obj_sample SAMPLE_TABLE%ROWTYPE; 
    json_sample clob; 
    file_clob clob;
    l_response clob;
BEGIN 
    -- query
    select * INTO obj_sample 
    from SAMPLE_TABLE where ID = 123;

    -- file as clob
    file_clob := apex_web_service.blob2clobbase64(obj_sample.BLOB_LOGO); 
    json_sample := json_object(
        'SAMPLE_LOGO' value img_clob
    );

    apex_web_service.g_request_headers(1).name := 'Content-Type';
    apex_web_service.g_request_headers(1).value := 'application/json';
    l_response   := apex_web_service.make_rest_request(
        p_url           => 'url/to/api/',
        p_http_method   => 'POST',
        p_body          => json_sample,
        p_proxy_override => 'url/to/proxy'
    );
    dbms_output.put_line(l_response);
END;

docs