get_file_data

in src/zgoog_conversation_agent/zgoog_i_conv_agent_imp.prog.abap [0:0]


  METHOD get_file_data.

    DATA ls_file_data   TYPE gty_file_data.
    DATA lv_file_length TYPE i.
    DATA lt_bin_data    TYPE STANDARD TABLE OF char1024.
    DATA lv_xfile       TYPE xstring.
    DATA lv_output      TYPE string.
    DATA lv_filename    TYPE string.

    FIELD-SYMBOLS:
                   <ls_file_table>  TYPE gty_file_table.

    LOOP AT gt_file_table ASSIGNING <ls_file_table>.
      lv_filename = <ls_file_table>-filename.
      CALL METHOD cl_gui_frontend_services=>gui_upload
        EXPORTING
          filename                = lv_filename
          filetype                = 'BIN'
        IMPORTING
          filelength              = lv_file_length
        CHANGING
          data_tab                = lt_bin_data
        EXCEPTIONS
          file_open_error         = 1
          file_read_error         = 2
          no_batch                = 3
          gui_refuse_filetransfer = 4
          invalid_type            = 5
          no_authority            = 6
          unknown_error           = 7
          bad_data_format         = 8
          header_not_allowed      = 9
          separator_not_allowed   = 10
          header_too_long         = 11
          unknown_dp_error        = 12
          access_denied           = 13
          dp_out_of_memory        = 14
          disk_full               = 15
          dp_timeout              = 16
          not_supported_by_gui    = 17
          error_no_gui            = 18
          OTHERS                  = 19.
      IF sy-subrc <> 0.
        MESSAGE TEXT-001 TYPE 'S' DISPLAY LIKE 'E'.
        ev_error = abap_true.
        RETURN.

      ENDIF.

      CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
        EXPORTING
          input_length = lv_file_length
        IMPORTING
          buffer       = lv_xfile
        TABLES
          binary_tab   = lt_bin_data.

      CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
        EXPORTING
          input  = lv_xfile
        IMPORTING
          output = lv_output.

      ls_file_data-filename  = lv_filename.
      IF <ls_file_table>-mime_type <> p_mime_file.
        <ls_file_table>-mime_type = p_mime_file.

      ENDIF.
      ls_file_data-mime_type = <ls_file_table>-mime_type.
      ls_file_data-filedata  = lv_output.

      APPEND ls_file_data TO et_file_data.
      CLEAR ls_file_data.

    ENDLOOP.