Отправить несколько файлов в ответ HTTP - PullRequest
0 голосов
/ 11 июня 2019

Я создал класс обработчика ICF, который отправляет файлы отправителю. Дело в том, что он отлично работает с одним файлом, где я читаю данные в двоичном формате и прикрепляю их в части тела, используя set_data.

Но когда я пытаюсь добавить более 1 файла, я не могу добавить 2 файла отдельно. Я использую IF_HTTP_EXTENSION и еще не имею NTW GATEWAY компонента.

Я также использую функцию MULTIPART, но не знаю, как добавить 2 файла отдельно. Не могли бы вы помочь мне?

//file1
server->response->set_header_field( name = 'Content-Type' value = 'multipart/mixed').
CONCATENATE 'form-data;name="file"; filename="' filename+5(9) '"' INTO lv_header_value.
server->response->set_header_field( name = 'content-disposition' value = lv_header_value ).
server->response->set_data( data = attach_xstring ).

//file2
server->response->add_multipart( ).
CONCATENATE 'form-data;name="file"; filename="' filename+5(9) '"' INTO lv_header_value.
server->response->set_header_field( name = 'content-disposition' value = lv_header_value ).
server->response->set_data( data = attach_xstring ).

1 Ответ

0 голосов
/ 30 июня 2019

Вам необходимо использовать add_multipart() метод.Попробуйте так:

      cl_http_client=>create( EXPORTING host = host service = port scheme = scheme
                              IMPORTING client = lo_http_client ).
      lo_http_client->request->set_header_field( name  = 'Content-Type' value = 'multipart/form-data' ). "#EC NOTEXT
      lo_request_part = lo_http_client->request->add_multipart( ).
      lo_request_part->set_content_type( 'application/xml' ).
      lv_content_disposition = |form-data; name="item"; filename="item_data.xml" |.
      lo_request_part->set_header_field( name = `Content-Disposition` value = lv_content_disposition ).
      lo_request_part->set_data( data = lv_create_item_xml ).

      LOOP AT mt_files ASSIGNING <attachment>.
        lo_request_part = lo_http_client->request->add_multipart( ).
        lo_request_part->set_content_type( <attachment>-content_type ). "#EC NOTEXT
        lv_content_disposition =  |form-data; name="{ <attachment>-part_name }"; filename="{ <attachment>-filename }" |.
        lo_request_part->set_header_field( name = `Content-Disposition` value = lv_content_disposition ).
        lo_request_part->set_data( <attachment>-file ).
      ENDLOOP.

Это образец для запроса, но для ответа схема должна быть такой же.Здесь изначально xml-файл добавляется в запрос и их несколько вложений обрабатываются в цикле.

...