ABAP-REST服务使用-POST多部分对象

2020-08-19 03:22发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

在ABAP中,有没有人举过使用分段上传文件的示例?

现在,我的代码大致是这样的:

数据:http_client类型引用为if_http_client,
           rest_client类型参考cl_rest_http_client,
           网址类型字符串。

     url = c_aws_url_post。

     将request_uri中的" {name}"替换为i_bucket_name。

     cl_http_client => create_by_url(
       出口
         网址=网址
         proxy_host ='xxxxxxxxx'
         proxy_service ='xxxx'"端口号
       输入
         客户端= http_client
       例外情况
         arguments_not_found = 1
         plugin_not_active = 2
         internal_error = 3
         其他= 4
     )。
 ........

   创建对象rest_client
       出口
         io_http_client = http_client。

    http_client-> request-> set_version(if_http_request => co_protocol_version_1_1)。

    cl_http_utility => set_request_uri(
       出口
         请求= http_client->请求
         uri =网址
     )。

    数据(rest_entity)= rest_client-> if_rest_client〜create_request_entity(iv_multipart = abap_true)。

    rest_entity-> set_binary_data(image)。  "图像是一个xstring

    rest_entity-> set_content_type(
       出口
          iv_media_type = if_rest_media_type => gc_multipart_form_data
    )。
    rest_entity-> set_header_field(
       出口
          iv_name = if_http_header_fields => content_disposition
          iv_value ='表单数据;  name ="文件";  filename =" adasd.jpg"'
     )。
        
     rest_entity-> set_header_field(
        出口
           iv_name = if_http_header_fields => content_type"标头名称
           iv_value ='image/jpeg'"标头值
     )。

     rest_client-> if_rest_client〜post(io_entity = rest_entity)。

     lo_response = rest_client-> if_rest_client〜get_response_entity()。

     data(http_status)= lo_response-> get_header_field('〜status_code')。
    
    data(response_string)= lo_response-> get_string_data()。

 

现在状态为500,我收到消息"当前请求不是多部分请求"。

我已经检查了其他SCN线程和文档(在这个主题上不是很好。官方文档提到了CL_REST_MP_FORM_DATA类;在我的系统中,我有CL_REST_MULTIPART_FORM_DATA;两个文档都没有足够的文档...)。

如果有人可以提供帮助,我将不胜感激。

干杯

塞尔吉奥

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

在ABAP中,有没有人举过使用分段上传文件的示例?

现在,我的代码大致是这样的:

数据:http_client类型引用为if_http_client,
           rest_client类型参考cl_rest_http_client,
           网址类型字符串。

     url = c_aws_url_post。

     将request_uri中的" {name}"替换为i_bucket_name。

     cl_http_client => create_by_url(
       出口
         网址=网址
         proxy_host ='xxxxxxxxx'
         proxy_service ='xxxx'"端口号
       输入
         客户端= http_client
       例外情况
         arguments_not_found = 1
         plugin_not_active = 2
         internal_error = 3
         其他= 4
     )。
 ........

   创建对象rest_client
       出口
         io_http_client = http_client。

    http_client-> request-> set_version(if_http_request => co_protocol_version_1_1)。

    cl_http_utility => set_request_uri(
       出口
         请求= http_client->请求
         uri =网址
     )。

    数据(rest_entity)= rest_client-> if_rest_client〜create_request_entity(iv_multipart = abap_true)。

    rest_entity-> set_binary_data(image)。  "图像是一个xstring

    rest_entity-> set_content_type(
       出口
          iv_media_type = if_rest_media_type => gc_multipart_form_data
    )。
    rest_entity-> set_header_field(
       出口
          iv_name = if_http_header_fields => content_disposition
          iv_value ='表单数据;  name ="文件";  filename =" adasd.jpg"'
     )。
        
     rest_entity-> set_header_field(
        出口
           iv_name = if_http_header_fields => content_type"标头名称
           iv_value ='image/jpeg'"标头值
     )。

     rest_client-> if_rest_client〜post(io_entity = rest_entity)。

     lo_response = rest_client-> if_rest_client〜get_response_entity()。

     data(http_status)= lo_response-> get_header_field('〜status_code')。
    
    data(response_string)= lo_response-> get_string_data()。

 

现在状态为500,我收到消息"当前请求不是多部分请求"。

我已经检查了其他SCN线程和文档(在这个主题上不是很好。官方文档提到了CL_REST_MP_FORM_DATA类;在我的系统中,我有CL_REST_MULTIPART_FORM_DATA;两个文档都没有足够的文档...)。

如果有人可以提供帮助,我将不胜感激。

干杯

塞尔吉奥

付费偷看设置
发送
3条回答
悻福寶寶
1楼 · 2020-08-19 04:08.采纳回答

设法修复它。 以下代码供以后参考:

数据:lo_response类型对if_rest_entity的引用。
     数据:lo_json_deserializer类型参考cl_trex_json_deserializer。

     数据:http_client类型为if_http_client的引用,
           rest_client类型参考cl_rest_http_client,
           网址类型字符串。

     url = c_aws_url_post。

     网址中的" {name}"替换为i_bucket_name。

     cl_http_client => create_by_url(
       出口
         网址=网址
         proxy_host ='xxxxxxxxx'
         proxy_service ='xxxx'
       输入
         客户端= http_client
       例外情况
         arguments_not_found = 1
         plugin_not_active = 2
         internal_error = 3
         其他= 4
     )。
     如果sy-subrc <> 0。
       消息ID sy-msgid类型sy-msgty编号sy-msgno
                  与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
     万一。

     cl_http_utility => set_request_uri(
       出口
         请求= http_client->请求
         uri =网址
     )。

     http_client-> request-> set_version(if_http_request => co_protocol_version_1_1)。

     创建对象rest_client
       出口
         io_http_client = http_client。

         数据:rest_multi类型引用到if_rest_multipart_entity。
         数据:rest_multi1类型引用到if_rest_entity。
       尝试。
         rest_multi?= rest_client-> if_rest_client〜create_request_entity(
                           iv_multipart = abap_true
                       )。

         rest_multi-> set_header_field(
           出口
             iv_name = if_http_header_fields => content_type
             iv_value = if_rest_media_type => gc_multipart_form_data
         )。

         rest_multi-> create_entity(
           出口
             iv_multipart = abap_false"创建一个多部分实体
           接收
             ro_entity = rest_multi1" REST实体
         )。

         rest_multi1-> set_header_field(
           出口
             iv_name = if_http_header_fields => content_disposition
             iv_value ='表单数据;  name ="文件";  filename =" adasd.jpg"'"使用变量作为文件名
         )。

         rest_multi1-> set_header_field(
           出口
             iv_name = if_http_header_fields => content_type
             iv_value = if_rest_media_type => gc_image_jpeg"使用变量作为内容类型
         )。

         rest_multi1-> set_binary_data(image)。

         rest_client-> if_rest_client〜post(io_entity = rest_multi)。

         lo_response = rest_client-> if_rest_client〜get_response_entity()。

         data(http_status)= lo_response-> get_header_field('〜status_code')。

         data(response_string)= lo_response-> get_string_data()。

       将cx_rest_client_exception捕获到数据中(rest_client_exception)。


         数据(错误)= rest_client_exception-> get_longtext()。


     努力。
 

因此,基本上,我们必须使用接口if_rest_multipart_entity创建一个实体(请注意转换),然后使用create_entity方法在该多部分实体中创建实体。

最诚挚的问候,

Sérgio

软件心理学工程师
2楼-- · 2020-08-19 03:59

您好-这与上传或下载有关吗? 我正在尝试使用Odata服务分段上传文件,并且需要注意几点。 提出这个问题

/img/questions/600142/how-to-handle-multipart-file-upload-data-in-backen.html?childToView=13047129#comment -13047129

四川大学会员
3楼-- · 2020-08-19 04:19

将其标记为您自己接受的;-)

一周热门 更多>