scp上传本地文件到服务器_SAP 服务器文件上传和下载

76dce0dfbb89a74a46e3e34b09c1cc14.png

关注我 教你偷偷写BUG 文 | 小艾同学 微信号:你不是扫地机器人(ID:Syczwysdxn) 01c3e49e1f465400dfa79d41166ffad9.png 不会写BUG的程序员,不是一个好的程序员

废话可以忽略

f6510a511a54399724ca8718f7dd0f17.png 6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

最近在做公司的项目,基本上全是自开发程序,遇到了各种各样的需求。于是挑选出一些不常用的,但是可能在某些地方确实需要的功能做一些笔记。以便于加强自己的记忆,使自己不易于忘却,以后回过头来翻翻也是件乐事。放在公众号里展示又可以给同是ABAP开发却不曾谋面的朋友一些提示或者思路,用以解惑,也算是我在这艰难的痛苦的一行做一份卑微的贡献。

6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

需求分析

f6510a511a54399724ca8718f7dd0f17.png 6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

要求在上传文件的时候,此文件与某一个单号进行绑定,以用于再下载的时候通过单号可以找到对应的文件,如下图

6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg bd69bd489abeddc8f91d195802a86291.png

实现步骤

f6510a511a54399724ca8718f7dd0f17.png 6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

由于要实现附件与单号的一一对应,所以我们要建一个自建表来存放附件与单号的对应关系。表结构可以参考下图,其中字段FTAPPL为事务码:AL11下面的文件存放路径,至于AL11怎么创建文件存放路径这里不做讲解,字段FTFRONT为本地文件路径。

6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg 4c002a552999750267614175b85edd1b.png

上传

f6510a511a54399724ca8718f7dd0f17.png 6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

通过方法:

CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG

获取本地文件路径,然后通过SPLIT关键字分割字符串,将文件名与服务器路径拼接在一起用于上传,比如我最终拼接成的文件路径为:/usr/sap/data/sddoc/test.txt,由于公众号不能插入ABAP代码,所以大家将就着看。

6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg
  DATA:LV_STR         TYPE STRING,       LT_SPLIT_TABLE TYPE TABLE OF STRING WITH HEADER LINE.* 获取文件路径  DATA LT_FILETABLE TYPE FILETABLE.  DATA LS_FILETABLE TYPE FILE_TABLE.  DATA LV_RC TYPE I.  CLEAR GV_FILE.  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG    EXPORTING      WINDOW_TITLE            = '选择文件'    "选择窗口描述      DEFAULT_EXTENSION       = 'XLSX'        "默认打开的文件格式*     default_filename        = 'C:\TEST.txt' "默认打开的文件名      FILE_FILTER             = 'EXCEL文件 (*.XLS)|*.XLS|EXCEL文件 (*.XLSX)|*.XLSX|全部文件 (*.*)|*.*|'*     with_encoding           =      INITIAL_DIRECTORY       = 'C:\' "初始化的目录*     multiselection          = "是否可以同时打开多个文件    CHANGING      FILE_TABLE              = LT_FILETABLE      RC                      = LV_RC*     user_action             =*     file_encoding           =    EXCEPTIONS      FILE_OPEN_DIALOG_FAILED = 1      CNTL_ERROR              = 2      ERROR_NO_GUI            = 3      NOT_SUPPORTED_BY_GUI    = 4      OTHERS                  = 5.  IF SY-SUBRC <> 0.*   Implement suitable error handling here  ELSE.    LOOP AT LT_FILETABLE INTO LS_FILETABLE.      GV_FILE = LS_FILETABLE-FILENAME.    ENDLOOP.  ENDIF.  CLEAR LT_SPLIT_TABLE[].  SPLIT GV_FILE AT '\' INTO TABLE LT_SPLIT_TABLE.  DESCRIBE TABLE LT_SPLIT_TABLE LINES GV_LINES.  READ TABLE LT_SPLIT_TABLE INDEX GV_LINES.  REMOTE_FILE = GV_PATH && LT_SPLIT_TABLE.  LOCAL_FILE = GV_FILE.
6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

然后,通过函数

 'C13Z_FILE_UPLOAD_BINARY'

将文件上传到SAP服务器中,代码如下,其中参数I_FILE_FRONT_END为本地文件路径,I_FILE_APPL为SAP服务器路径,在上传成功之后我们将单号、本地文件路径、SAP文件路径保存到自建表中,用于下载的时候能让文件件和单号一一对应。注意:别忘了给SY-CPROG赋值,如下。

6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg
  SY-CPROG = 'RC1TCG3Z'.  CALL FUNCTION 'C13Z_FILE_UPLOAD_BINARY'    EXPORTING      I_FILE_FRONT_END   = LOCAL_FILE      I_FILE_APPL        = REMOTE_FILE      I_FILE_OVERWRITE   = 'X'          "覆盖现有文件* IMPORTING*     E_FLG_OPEN_ERROR   = E_FLG_OPEN_ERROR*     E_OS_MESSAGE       = E_OS_MESSAGE    EXCEPTIONS      FE_FILE_NOT_EXISTS = 1      FE_FILE_READ_ERROR = 2      AP_NO_AUTHORITY    = 3      AP_FILE_OPEN_ERROR = 4      AP_FILE_EXISTS     = 5      AP_CONVERT_ERROR   = 6      OTHERS             = 7.  IF SY-SUBRC <> 0.    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  ELSE.    CLEAR GS_ZTSD_005_WJSC.    GS_ZTSD_005_WJSC-ZESD_KFHYZBM = GS_2201-ZESD_KFHYZBM.    GS_ZTSD_005_WJSC-FTAPPL       = REMOTE_FILE.    GS_ZTSD_005_WJSC-FTFRONT      = LOCAL_FILE.    MODIFY ZTSD_005_WJSC FROM GS_ZTSD_005_WJSC.    MESSAGE '附件上传成功!!' TYPE 'S'.  ENDIF.

下载

f6510a511a54399724ca8718f7dd0f17.png 6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

同样,通过函数获取到本地的文件路径

CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG

然后通过单号查询自建表,获取之前上传的文件路径,也获取到之前存放的SAP服务器路径,用SPLIT关键字将分割路径,获取文件名,在调用函数的时候给文件名赋初始值,或者可以手工改。在获取路径之后使用函数

'C13Z_FILE_DOWNLOAD_BINARY' 下载SAP服务器上的文件,本地路径和SAP服务器路径参数别传错了。

6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg
  DATA: LV_DESTINATION TYPE RLGRAP-FILENAME,        LV_ACTION      TYPE I,        LV_FILENAME    TYPE STRING,        LV_PATH        TYPE STRING,        LV_FULLPATH    TYPE STRING. "下载后存放路径  DATA:LV_STR         TYPE STRING,       LT_SPLIT_TABLE TYPE TABLE OF STRING WITH HEADER LINE.  CLEAR LT_SPLIT_TABLE[].  SPLIT GS_ZTSD_005_WJSC-FTFRONT AT '\' INTO TABLE LT_SPLIT_TABLE.  DESCRIBE TABLE LT_SPLIT_TABLE LINES GV_LINES.  READ TABLE LT_SPLIT_TABLE INDEX GV_LINES.  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG    EXPORTING      WINDOW_TITLE         = '附件下载'*     default_extension    =      DEFAULT_FILE_NAME    = LT_SPLIT_TABLE*     with_encoding        =*     file_filter          =*     initial_directory    =      PROMPT_ON_OVERWRITE  = 'X'    CHANGING      FILENAME             = LV_FILENAME      PATH                 = LV_PATH      FULLPATH             = LV_FULLPATH      USER_ACTION          = LV_ACTION*     file_encoding        =    EXCEPTIONS      CNTL_ERROR           = 1      ERROR_NO_GUI         = 2      NOT_SUPPORTED_BY_GUI = 3      OTHERS               = 4.  IF SY-SUBRC <> 0 OR LV_ACTION <> 0.    MESSAGE S000(OO) WITH '已取消'.  ELSE.    REMOTE_FILE = GS_ZTSD_005_WJSC-FTAPPL.    LOCAL_FILE = LV_FULLPATH.    SY-CPROG = 'RC1TCG3Z'.    CALL FUNCTION 'C13Z_FILE_DOWNLOAD_BINARY'      EXPORTING        I_FILE_FRONT_END    = LOCAL_FILE        I_FILE_APPL         = GS_ZTSD_005_WJSC-FTAPPL        I_FILE_OVERWRITE    = 'X'* IMPORTING*       E_FLG_OPEN_ERROR    = E_FLG_OPEN_ERROR*       E_OS_MESSAGE        = E_OS_MESSAGE      EXCEPTIONS        FE_FILE_OPEN_ERROR  = 1        FE_FILE_EXISTS      = 2        FE_FILE_WRITE_ERROR = 3        AP_NO_AUTHORITY     = 4        AP_FILE_OPEN_ERROR  = 5        AP_FILE_EMPTY       = 6        OTHERS              = 7.    IF SY-SUBRC <> 0.      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.    ELSE.      MESSAGE '附件下载成功!!' TYPE 'S'.    ENDIF.  ENDIF.
6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg

我只贴了主要的代码,由于并不是代码编辑器,所以细节代码也不好展示,如有问题可以加我微信号索要源码。

6294078f-e336-eb11-8da9-e4434bdf6706.svg 6594078f-e336-eb11-8da9-e4434bdf6706.svg a9df09c3794e0ded1e00f354d7401a40.png -公众号第一篇文章,帮忙点个关注吧-

c7419cdea4c3e2ed0dc65392c37113ce.png

df54749f1d5a66decb5a1de6dd9d6879.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值