使用网关的文件附件

2020-08-30 16:51发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

新方案:使用SAP Netweaver Gateway上载和下载文件。

不知道该如何解决。

我希望对此要求提供宝贵的建议和建议。

在此先感谢

此致

吉宾·乔伊

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

新方案:使用SAP Netweaver Gateway上载和下载文件。

不知道该如何解决。

我希望对此要求提供宝贵的建议和建议。

在此先感谢

此致

吉宾·乔伊

付费偷看设置
发送
7条回答
clever101
1楼 · 2020-08-30 17:11.采纳回答

您好Jibin/Jessie

TLDR答案取决于要求。 我可以想到几种方法来使用Gateway服务实现上载和下载文件。 最有效的方法是提供指向文件内容的URL链接,然后让单独的客户端调用通过网关服务将数据流传输到服务器或从服务器传出数据,或者通过独立于网关服务的方法维护数据。

OData协议使您能够定义数据馈送,这些数据馈送还使二进制大对象(BLOB)数据(例如照片,视频和文档)可供使用OData馈送的客户端应用程序使用。 出于性能方面的考虑,在Feed中自己返回BLOB并不是一个好习惯,而是通过Feed中存在的Media Link Entry分别调用二进制数据(称为媒体资源)。

例如

<内容类型=" image/jpeg" src=" EmployeePhoto(4)/$ value"/>

http://www.linkedin.com/ profilephotos/xyz.jpg"/>

使用媒体链接的示例 检索工作流附件。 工作流程服务->媒体链接-请参见

DPC:/IWWRK/CL_MGW_RT_WORKFLOW

MPC:/IWWRK/CL_MGW_MED_WORKFLOW

如果您可以访问电子病历网关服务,则可以看到两者的使用方式 提要中的"媒体链接"和"二进制"字段

/MEMR/CL_ET_ATTACHMENT_HANDLER

/MEMR/CL_ET_DOCUMENT_HANDLER

为支持网关服务中的流传输,DPC具有以下方法 :

/IWBEP/IF_MGW_APPL_SRV_RUNTIME〜CREATE_STREAM

/IWBEP/IF_MGW_APPL_SRV_RUNTIME〜GET_STREAM

/IWBEP/IF_MGW_APPL_SRV_RUNTIME〜UPDATE_ENTITY/I> IF_MGW_APPL_SRV_RUNTIME〜DELETE_STREAM

本文的前半部分解释了该文件应如何工作 OData对流的支持

我能找到的唯一完整的CRUD示例是

/IWBEP/CL_ MGW_RT_SFLIGHT本地类LCL_CARRIER-> Create/Update/Delete_Stream,但是此代码似乎不是活动的或最新的。

希望它会有所帮助。

干杯

John P

天桥码农
2楼-- · 2020-08-30 17:38

你好Vinit,

我们没有SAPUI5应用。 我们的应用程序用户界面使用X代码在iOS平台上构建。 图像数据被转换为BASE64,然后作为原始数据传递到http请求中。 在SAP方面,我做了以下事情:

1。 使用FM SCMS_XSTRING_TO_BINARY将XSTRING转换为Binary

2。 使用FM SCMS_BINARY_TO_STRING将二进制文件转换为字符串

3。 使用FM SSFC_BASE64_DECODE解码BASE64中的字符串

4。 在应用程序服务器上将数据按原样保存为扩展名为.png的文件。

我希望这会有所帮助。

谢谢

Rutul

wang628962
3楼-- · 2020-08-30 17:37

如果文件是通过表单上传的,请查找代码以获取文件内容

功能ZFM_GW_STREAM_READER。
*" ---------- -------------------------------------------------- ----------
*" *"本地接口:
*" IMPORTING
*" VALUE(IV_FILE_CONTENT)TYPE XSTRING
*" VALUE(IV_CONTENT_TYPE)TYPE STRING OPTIONAL < br> *" EXPORTING
*" VALUE(EV_FILE_CONTENT)类型XSTRING
*" VALUE(ET_REQUEST_HEADER)类型TIHTTPNVP
*" EXCEPTIONS
*" INVALID_FILE_CONTENT
*" ------ -------------------------------------------------- --------------
常量:lc_boundary TYPE字符串VALUE'boundary =',
lc_new_line TYPE字符串VALUE'0D0A',
lc_srt_file TYPE字符串VALUE'0D0A0D0A',
lc_key_val_sep TYPE字符串值':'。
数据:
lv_xlen TYPE int4,
lv_bolen TYPE int4,
lv_bvalue TYPE字符串,
lv_cufile_content TYPE字符串, lv_bxs TYPE字符串,
lv_header TYPE字符串,
lv_content_footer TYPE字符串,
lv_content TYPE字符串,
lv_footer TYPE字符串,
lv_end_file1 TYPE字符串,
lv_end_file2 TYPE字符串,
lv_bxvalue TYPE xstring,
lt_fnd_boundary TYPE match_result_tab,
lt_fnd_temp TYPE match_result_tab,
ls_fnd_boundary TYPE match_result,
ls_headers TYPE ihttpnvp,
lv_xsheaders TYPE ls_xsheaders TYPE字符串,
lt_xsheaders TYPE TABLE OF字符串。

数据:lv_contant_final_val TYPE字符串,
lv_contant_temp_val TYPE字符串,
lv_content_type TYPE字符串,
lv_content_type_xstr TYPE。 br> lv_cufile_content = iv_file_content。
lv_content_type = iv_content_typ e。

"在SP5服务器中,内容类型可能为空。 因此,如果条件用于从xstring内容中获取文件名/内容类型,则
如果lv_content_type是INITIAL。
"拆分出现新行的xstring。
SPLIT lv_cufile_content AT lc_new_line INTO lv_contant_final_val lv_contant_temp_val。
"从xstring内容中删除两个破折号。
SHIFT lv_contant_final_val按4个位置左移。
lv_content_type_xstr = lv_contant_final_val。
CLEAR lv_contant 调用功能'ECATT_CONV_XSTRING_TO_STRING'
导出
im_xstring = lv_content_type_xstr
IM_ENCODING ='UTF-8'
IMPORTING
EX_STRING = lv_contant_final_val。

"将前缀数据添加到字符串值 。
IF sy-subrc =0。
CONCATENATE'multipart/form-data; boundary ='lv_contant_final_val INTO lv_content_type。
ENDIF。

ENDIF。

内容类型的边界值
查找第一 出现lc_boundary IN
lv_content_type
结果lt_fnd_boundary。
检查sy-subrc EQ 0。
读取表lt_fnd_boundary INTO ls_fnd_boundary INDEX 1。
lv_bolen = ls_fnd_bound。 >"使用额外的-(-<边界值>)
为身体创建身体边界值,CONCATENATE'-'lv_content_type + lv_bolen INTO lv_bvalue。
通话功能'ECATT_CONV_STRING_TO_XSTRING'
导出
im_string = lv_bvalue
导入
ex_xstring = lv_bxvalue。
lv_bxs = lv_bxvalue。
lv_xlen = strlen(lv_bxs)。
"验证是否用新行(ODOA)替换请求正文中的边界键
IF lv_cufile_content + 0(lv_xlen)EQ lv_bxvalue AND lv_cufile_content + lv_xlen(4)EQ lc_new_line。
"从正文边界键中的正文请求中分割标题,
SPLIT lv_cufile_content AT lc_srt_file INTO lv_header。 来自主体边界键的来自主体的页脚请求
" f 以后,以两种格式开始
"一种是,并用新行(ODOA)
",另一种是-
合并lc_new_line lv_bxs lc_new_line INTO lv_end_file1。
查找lv_end_file1 IN的第一次出现。
IF sy-subrc EQ 0。
拆分lv_content_footer AT lv_end_file1 INTO lv_content lv_footer。
ELSE。
链接lc_new_line 2D D. br>清除lt_fnd_temp。
查找lv_end_file2 IN的第一次出现
lv_content_footer。
IF sy-subrc EQ 0。
拆分lv_content_footer AT lv_end_file2 INTO lv_content lv_footer。。 。 "没有结尾主体边界键
ENDIF。
ENDIF。
ev_file_content = lv_content。
ELSE。
RAISE invalid_file_content。"没有起始主体边界键
ENDIF。
"获取 来自请求
SPLIT lv_header AT lc_new_line INTO TABLE lt_xsheaders的请求信息。
lt_xsheaders LOOP AT到2的ls_xsheaders LOOP AT。
lv_xsheaders = ls_xsheaders。 im_xstring = lv_xsheaders
导入
ex_string = lv_sheaders。
拆分lv_sheaders AT lc_key_val_sep INTO ls_headers-name ls_headers-value。
如果sy-subrc EQ0。
CONDENSE:ls_headers 值。
APPEND将ls_headers添加到et_request_header。
ENDIF。
ENDLOOP。
ENDFUNCTION。 >

您是否找到了有关如何删除webkitformboundary的解决方案? 我也面临同样的问题,感谢您的帮助。

谢谢

Rutul

CJones
4楼-- · 2020-08-30 17:34

我解决了webkitformboundary问题,该问题将Ajax申请置于请求中并在事件handleUploadComplete中发送ui5的文件对象

                 handleUploadComplete:函数(oEvent){
 
                     var oCremer = this.byId(oEvent.getParameter(" id"));

                     $ .ajax({
                         网址:"-隐藏网址-/GW_UPLOADER_SRV/uploadSet",
                         输入:" POST",
                         数据:oCremer.FUEl.files [0],
                         contentType:false,
                         processData:否,
                         成功:功能(响应){
                         },
                         错误:函数(响应,x){
                         }
                     });


                 },
 
昵称总是被占用
5楼-- · 2020-08-30 17:14

我有相同的问题,我期待有人对此提供一些提示。

微wx笑
6楼-- · 2020-08-30 17:17

亲爱的朋友,

我面临的情况是,对于标头(第一实体),我需要上传多个附件(第二实体)。

我已经在2个实体之间建立了关联和导航。 我了解GET_STREAM/CREATE_STREAM是基于通过HTTP进行的操作调用的。

我的问题是,如何为一个实体多次调用CREATE_STREAM或GET_STREAM?

注意,

Venkat

Tong__Ming
7楼-- · 2020-08-30 17:25

嗨吉斌,

您找到解决问题的方法了吗? 将文件发送到CREATE_STREAM方法时,webkitformboundary包围的文件确实遇到了问题。 浏览器是IE8,因此在这里不能做太多事情。

致谢

Neha

一周热门 更多>