暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用PlSql UTL_HTTP上传Rest web服务中的文件

ASKTOM 2020-03-30
1114

问题描述

嗨,

我正在使用PLSQL UTL_HTTP包调用REST web服务,在JSON中,没有问题。

然而,现在我需要调用一个WS,但附加一个文件。


我可以在 “表单数据” 模式下与邮递员一起做。

在PLSQL中,我在请求的正文中尝试了同样的事情:

{
"file":"/C:Users/myuser/Desktop/image_01.jpg"
}
复制


因为这是Postman使用的语法。WS执行,但返回带有错误标记。


我也尝试过使用这个 (代码snipet),但结果是一样的,它执行,但结果不是它应该是什么:



DECLARE

  l_buffer    RAW(32767);

  l_amount    INTEGER := 32767;

  l_pos       INTEGER := 1;

  l_blob_len  PLS_INTEGER;

BEGIN

   /* p_file is the file to upload as a BLOB parameter */

  IF p_file IS NOT NULL THEN

    BEGIN

      l_blob_len := dbms_lob.getlength(p_file);

      utl_http.set_header(v_req, 'Content-Type', 'application/octet-stream'); -- v_req is a parameter

      utl_http.set_header(v_req, 'Content-Length', l_blob_len);

     
      WHILE l_pos < l_blob_len LOOP

        dbms_lob.read(p_file, l_amount, l_pos, l_buffer);

        utl_http.write_raw(v_req, l_buffer);

        l_pos := l_pos + l_amount;

      END LOOP;

    EXCEPTION

      WHEN OTHERS THEN

        p_err := SQLCODE;

        p_msg := 'ERROR: ' || SQLERRM;

    END;

  END IF;

END;
复制



任何帮助将不胜感激。

罗德里戈·库蒂尼奥
葡萄牙

专家解答

我认为:

/C:Users/myuser/Desktop/image_01.jpg
复制


应该是你机器上的一个位置吗?

如果是这样,则无法使用PL/SQL读取它。该文件必须存在于数据库服务器可访问的位置中。

我不确定你到底在做什么,但你可能需要做一些事情:

-将文件复制到数据库服务器
-使用UTL_file读取它
-使用UTL_HTTP将其附加到REST请求

如果这是最终用户将上传文件的过程...你需要重新考虑你的策略。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论