Documente Academic
Documente Profesional
Documente Cultură
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_http_extension .
CLASS-METHODS class_constructor .
PROTECTED SECTION.
private section.
methods UPLOAD_RESPONSE
importing
!SERVER type ref to IF_HTTP_SERVER .
methods RESPONSE
importing
!SERVER type ref to IF_HTTP_SERVER .
methods GET_FILE_DETAIL
importing
!IV_CONTENT type STRING
exporting
!EV_FILENAME type STRING
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_FILE_UPLOAD=>CLASS_CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD class_constructor.
crlflength = strlen( cl_abap_char_utilities=>cr_lf ).
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_FILE_UPLOAD->CREATE_ATTACHMENT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_DATA
TYPE
XSTRING
* | [--->] IV_GUID
TYPE
STRING
* | [--->] IV_FILE_NAME
* | [--->] IV_FILE_TYPE
TYPE
TYPE
* | [--->] IV_BOR_TYPE
TYPE
STRING
STRING
STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD create_attachment.
DATA:
ls_bo
TYPE sibflporb,
ls_prop
lt_prop
TYPE sdokproptys,
TYPE sdokfilaci,
lt_file_info
TYPE sdokfilacis,
lt_file_content
lv_length
lv_file_xstring
ls_loio
TYPE sdokcntbins,
TYPE i,
TYPE xstring,
TYPE skwf_io,
ls_phio
TYPE skwf_io,
ls_error
TYPE skwf_error.
ls_prop-name = 'DESCRIPTION'.
ls_prop-value = iv_file_name.
APPEND ls_prop TO lt_prop.
ls_prop-name = 'KW_RELATIVE_URL'.
ls_prop-value = iv_file_name.
APPEND ls_prop TO lt_prop.
ls_prop-name = 'LANGUAGE'.
ls_prop-value = sy-langu.
APPEND ls_prop TO lt_prop.
lv_file_xstring = iv_data.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer
= lv_file_xstring
IMPORTING
output_length = lv_length
TABLES
binary_tab
= lt_file_content.
ls_file_info-binary_flg = 'X'.
ls_file_info-file_name = iv_file_name.
ls_file_info-file_size = lv_length.
ls_file_info-mimetype = iv_file_type.
APPEND ls_file_info TO lt_file_info.
ls_bo-instid = iv_guid.
ls_bo-typeid = iv_bor_type.
ls_bo-catid = 'BO'.
business_object
properties
= ls_bo
= lt_prop
properties_attr
= lt_properties_attr
file_access_info
= lt_file_info
file_content_binary = lt_file_content
raw_mode
= 'X'
IMPORTING
loio
= ls_loio
phio
= ls_phio
error
= ls_error.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_FILE_UPLOAD->GET_FILE_CONTENT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_SUBSTR
TYPE
STRING
* | [--->] IV_FILETYPE
TYPE
STRING
* | [<---] EV_LENGTH
* | [<---] EV_CONTENT
TYPE
TYPE
INT4
XSTRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_file_content.
DATA: lt_result
TYPE string_table,
lv_sub
TYPE string,
lv_offset
TYPE i,
lv_digit
TYPE c,
lv_index
TYPE i,
lv_offset2
TYPE i,
lv_len
TYPE i,
l_conv
lv_sub = lv_sub+lv_offset(lv_len).
CONDENSE lv_sub.
ev_length = lv_sub.
lv_sub = iv_substr+lv_offset(lv_len).
CLEAR: ev_content.
DO lv_len TIMES.
lv_index = sy-index - 1.
lv_digit = lv_sub+lv_index(1).
ASSIGN lv_digit TO <hex> CASTING.
CONCATENATE ev_content <hex>(1) INTO ev_content IN BYTE MODE.
ENDDO.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_FILE_UPLOAD->GET_FILE_DETAIL
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_CONTENT
TYPE
STRING
* | [<---] EV_FILENAME
TYPE
STRING
* | [<---] EV_FILETYPE
TYPE
STRING
* | [<---] EV_LENGTH
TYPE
INT4
* | [<---] EV_CONTENT
TYPE
XSTRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD get_file_detail.
DATA: lv_offset1 TYPE int4,
lv_offset2 TYPE int4,
lv_len
TYPE int4,
lv_sub
TYPE string,
lv_sub2
TYPE string.
ev_filename = lv_sub.
ev_filetype = lv_sub.
ev_content = ev_content.
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_FILE_UPLOAD>IF_HTTP_EXTENSION~HANDLE_REQUEST
* +-------------------------------------------------------------------------------------------------+
* | [--->] SERVER
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD if_http_extension~handle_request.
DATA: lt_form
TYPE tihttpnvp,
lv_data
TYPE string,
lv_boundary
TYPE string,
TYPE string,
lt_result
TYPE string_table,
lv_line
TYPE string,
lv_uuid
TYPe string,
lv_filelength TYPE i,
lv_filecontent TYPE xstring,
lv_filetype
TYPE string.
ENDLOOP.
upload_response( server ).
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_FILE_UPLOAD->RESPONSE
* +-------------------------------------------------------------------------------------------------+
* | [--->] SERVER
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD response.
DATA: lv_input_str TYPE string,
lv_html
lt_scarr
TYPE string,
TYPE TABLE OF scarr.
FIELD-SYMBOLS:
<fs_scarr> TYPE scarr.
ENDIF.
ENDLOOP.
ENDIF.
IF strlen( lv_html ) = 0.
lv_html = '<no suggestion>'.
ENDIF.
server->response->set_cdata( lv_html ).
server->response->set_header_field( name = 'Access-Control-Allow-Origin' value
= '*' ).
ENDMETHOD.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_FILE_UPLOAD->UPLOAD_RESPONSE
* +-------------------------------------------------------------------------------------------------+
* | [--->] SERVER
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD UPLOAD_RESPONSE.
DATA: lv_str TYPE string,
lv_html
TYPE string.
IF strlen( lv_html ) = 0.
lv_html = '<no file uploaded>'.
ENDIF.
server->response->set_cdata( lv_html ).