ABAP 调用接口传输文件(multipart form-data)
参数:

代码:
FUNCTION zfm_send_file.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IV_URL) TYPE STRING
*" REFERENCE(IS_CONTENT) TYPE SFPATTACHMENTS
*" REFERENCE(IV_TOKEN) TYPE STRING
*" VALUE(IS_MULTIPART) TYPE CHAR1 DEFAULT ''
*" REFERENCE(IV_TENANTLD) TYPE STRING OPTIONAL
*" EXPORTING
*" REFERENCE(EV_TYPE) TYPE CHAR1
*" REFERENCE(EV_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------DATA: lo_http_client TYPE REF TO if_http_client,lo_part TYPE REF TO if_http_entity.TYPES:BEGIN OF ty_response,bizcode TYPE char10,message TYPE char100,data TYPE string,END OF ty_response.DATA:ls_response TYPE ty_response,lv_body TYPE string.DATA: lt_formdata TYPE tihttpnvp,ls_formdata LIKE LINE OF lt_formdata,lv_len TYPE i,lv_str TYPE string.* 创建客户端请求cl_http_client=>create_by_url(EXPORTINGurl = iv_urlIMPORTINGclient = lo_http_clientEXCEPTIONSargument_not_found = 1plugin_not_active = 2internal_error = 3OTHERS = 4 ).lv_len = xstrlen( is_content-data ).IF iv_token IS NOT INITIAL.CALL METHOD lo_http_client->request->set_header_fieldEXPORTINGname = 'Authorization'value = iv_token.ENDIF.IF iv_tenantld IS NOT INITIAL.CALL METHOD lo_http_client->request->set_header_fieldEXPORTINGname = 'TenantId'value = iv_tenantld.ENDIF.IF is_multipart = 'X'.CALL METHOD lo_http_client->request->set_header_fieldEXPORTINGname = 'Content-Type'value = 'multipart/form-data'.* CALL METHOD lo_http_client->request->set_header_field
* EXPORTING
* name = 'x-timevale-project-id'
* value = ''.CALL METHOD lo_http_client->request->if_http_entity~set_formfield_encodingEXPORTINGformfield_encoding = cl_http_request=>if_http_entity~co_encoding_raw.lo_part = lo_http_client->request->if_http_entity~add_multipart( ).CALL METHOD lo_part->set_header_fieldEXPORTINGname = 'content-disposition'value = 'form-data; name="file"; filename="' && is_content-name && '";'.lv_str = is_content-mimetype.CALL METHOD lo_part->set_content_typeEXPORTINGcontent_type = lv_str. "text/plainCALL METHOD lo_part->set_dataEXPORTINGdata = is_content-dataoffset = 0length = lv_len.ELSE.lv_str = is_content-mimetype.CALL METHOD lo_http_client->request->set_header_fieldEXPORTINGname = 'Content-Type' "text/plainvalue = lv_str.CALL METHOD lo_http_client->request->set_dataEXPORTINGdata = is_content-dataoffset = 0length = lv_len.ENDIF.CALL METHOD lo_http_client->request->set_method( 'POST' ).lo_http_client->send(EXCEPTIONShttp_communication_failure = 1http_invalid_state = 2 ).IF sy-subrc <> 0.ev_type = 'E'.lo_http_client->get_last_error( IMPORTING message = ev_message ).ELSE.lo_http_client->receive(EXCEPTIONShttp_communication_failure = 1http_invalid_state = 2http_processing_failed = 3 ).IF sy-subrc = 0." 返回字符串lv_body = lo_http_client->response->get_cdata( )./ui2/cl_json=>deserialize(EXPORTINGjson = lv_bodypretty_name = /ui2/cl_json=>pretty_mode-none"CHANGINGdata = ls_response ).IF ls_response-bizcode = '0'.ev_type = 'S'.ELSE.ev_type = 'E'.ENDIF.ev_message = ls_response-message.ELSE.ev_type = 'E'.lo_http_client->get_last_error( IMPORTING message = ev_message ).ENDIF.ENDIF.ENDFUNCTION.