Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member


Let's consider that we have working solution of file download from gateway as it is described for example in this blog How to Read Photo from SAP system using SAP Gateway.

When we point to the file, browsers does not handle the file name correctly, as they consider $value as name of the file. Thus it is not comfortable to open the file. Also, file name is shown as $value too which is inconvenient for the user when he wants to save the file.

To solve this issue we can set content-disposition response header according to rfc 1806 to inline and set the name of file there. Then browser will be able to recognize the name, user can save it with the name as it is set in SAP system.

Here is the sample code of method GET_STREAM implementation:

METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream.
DATA: ls_stream TYPE ty_s_media_resource,
er_entity TYPE REF TO data,
lr_entity TYPE REF TO data,
ls_file TYPE cl_sample_mpc=>ts_file,
ls_lheader TYPE ihttpnvp.
CASE iv_entity_name.
WHEN 'File'.
* Load ls_file info here
ls_stream-value = ls_file-content.
ls_stream-mime_type = ls_file-mime_type.
ls_lheader-name = 'Content-Disposition'.
ls_lheader-value = 'inline; filename="'.
CONCATENATE ls_lheader-value ls_file-file_name INTO ls_lheader-value.
CONCATENATE ls_lheader-value '"' INTO ls_lheader-value.
set_header( is_header = ls_lheader ).
copy_data_to_ref( EXPORTING is_data = ls_stream
CHANGING cr_data = er_stream ).
ENDCASE.
ENDMETHOD.







UPDATE: Escaping characters

If the file name contains specials characters, or just space, it is necessary to escape characters in the backend. To do so, following method can be used:

ls_file-file_name = escape( val = ls_file-file_name
format = cl_abap_format=>e_url ).



7 Comments