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/