1 在SEGW中创建一个新的工程。

 

 

 

 

2 创建一个Entity "File", 并且为这个Entity创建Entity Set "FileSet", 这里也可以起其他的名字

 

 

 

 

3 设置Entity为Media类型。

 

4 创建属性property "FileName" 设置为key,并设置为string类型

 

  

 

 

 5 运行Generate run-time objects (or artifacts)

  

 

 

  

 

 

  6 创建Z table ZZUPLD 用来存储文件,存储文件的字段类型要定义成"RAWSTRING"类型.

 

 

 

 7 选择ZCL_ZDEMO_FILE_TEST_DPC_EXT,重新实装

  /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM 用于Get操作。

  /IWBEP/IF_MGW_APPL_SRV_RUNTIME~UPDATE_STREAM 用于Put操作。

 要是需要Post与Delete操作,需要实装另外的方法.

  

 

 

 

 

 

 /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM 

DATA: ls_stream  TYPE ty_s_media_resource,

              ls_upld    TYPE zzupld.

READ TABLE it_key_tab ASSIGNING FIELD-SYMBOL(<fs_key>) INDEX 1.

DATA: lv_filename TYPE char30.

lv_filename = <fs_key>-value.

SELECT SINGLE * FROM zzupld INTO ls_upld WHERE filename = lv_filename.

  IF ls_upld IS NOT INITIAL.

ls_stream-value = ls_upld-value.

ls_stream-mime_type = ls_upld-mimetype.

copy_data_to_ref( EXPORTING is_data = ls_stream

                    CHANGING  cr_data = er_stream ).

ENDIF.

/IWBEP/IF_MGW_APPL_SRV_RUNTIME~UPDATE_STREAM

DATA: lw_file TYPE zzupld.

READ TABLE it_key_tab ASSIGNING FIELD-SYMBOL(<fs_key>) INDEX 1.

lw_file-filename = <fs_key>-value.

lw_file-value    = is_media_resource-value.

lw_file-mimetype = is_media_resource-mime_type.

lw_file-sydate  = sy-datum.

lw_file-sytime  = sy-uzeit.

MODIFY zzupld FROM lw_file.

 

 

 

8 注册服务

 

 

 

 

 

 

 

 9  测试Get /sap/opu/odata/SAP/ZDEMO_FILE_TEST_SRV/FileSet('lor.jpg')/$value ,注意FileSet中的文件名需要使用单引号. 这里的图片,我是先用Put上传的.

 

 

 

 10 测试Put /sap/opu/odata/sap/ZDEMO_FILE_SRV/FileSet('lor.jpg')/$value ,注意FileSet中的文件名需要使用单引号.

       因为的的segw还是有403 crfc的问题,所以这里用Postman测试,需要在httphead中设置以下信息。 其中Cookie与x-csrf-token,是在get之中取得的数据。

       在Body中选择需要上传的文件.

  

参照:

https://blogs.sap.com/2014/09/23/file-uploaddownload-through-netweaver-gateway/

posted on 2019-09-02 16:14  suoluo119  阅读(590)  评论(0编辑  收藏  举报