SAP 连接FTP服务器上传文件示例

1.先决条件

2.实现代码

PARAMETERS: P_FILE   TYPE STRING OBLIGATORY,
            P_HOST   TYPE CHAR30 DEFAULT '10.3.123.140' LOWER CASE,
            P_FOLDER TYPE CHAR100 DEFAULT '/sap/' LOWER CASE,   "ftp服务器路径;必须/结尾
            P_USER   TYPE CHAR30 DEFAULT 'user' LOWER CASE,
            P_PASSWD TYPE CHAR30 DEFAULT 'a123456' LOWER CASE,
            DEST     LIKE RFCDES-RFCDEST DEFAULT 'SAPFTP',
            COMPRESS TYPE C DEFAULT 'N'.                            "是否压缩

DATA: PATH     TYPE STRING,                                             "用于接收上传文件的路径和名称
      FILENAME TYPE STRING.


DATA: HDL     TYPE I,
      KEY     TYPE I VALUE 26101957,
      SLEN    TYPE I,
      CMD(80) TYPE C.

DATA: BEGIN OF RESULT OCCURS 0,
        LINE(100) TYPE C,
      END OF RESULT.

DATA: ABAP_ENCODING TYPE ABAP_ENCODING VALUE 'UTF-8'.



AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  CALL FUNCTION 'GUI_FILE_LOAD_DIALOG'
    EXPORTING
      WINDOW_TITLE  = '打开文件'
*     DEFAULT_EXTENSION       =
*     DEFAULT_FILE_NAME       =
      WITH_ENCODING = ABAP_TRUE
*     FILE_FILTER   =
*     INITIAL_DIRECTORY       =
    IMPORTING
      PATH          = PATH
      FILENAME      = FILENAME
      FULLPATH      = P_FILE
      FILE_ENCODING = ABAP_ENCODING.

START-OF-SELECTION.

  SLEN = STRLEN( P_PASSWD ).

* "获取加密密码 保存到P_PASSWD
  CALL FUNCTION 'HTTP_SCRAMBLE'
    EXPORTING
      SOURCE      = P_PASSWD
      SOURCELEN   = SLEN
      KEY         = KEY
    IMPORTING
      DESTINATION = P_PASSWD.

* 连接ftp服务器
  CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
      USER            = P_USER
      PASSWORD        = P_PASSWD
      HOST            = P_HOST
      RFC_DESTINATION = DEST
    IMPORTING
      HANDLE          = HDL.  "连接的句柄

  "执行FTP命令 CD 打开目标ftp的文件夹
  "now open the target ftp folder
  CONCATENATE 'cd' P_FOLDER INTO CMD SEPARATED BY SPACE.
  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      HANDLE        = HDL
      COMMAND       = CMD
      COMPRESS      = COMPRESS
    TABLES
      DATA          = RESULT
    EXCEPTIONS
      COMMAND_ERROR = 1
      TCPIP_ERROR   = 2.
  LOOP AT RESULT.
    WRITE AT / RESULT-LINE.
  ENDLOOP.
  REFRESH RESULT.

* 打开本地需上传文件的路径
  CONCATENATE 'lcd' PATH INTO CMD SEPARATED BY SPACE.
  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      HANDLE        = HDL
      COMMAND       = CMD
      COMPRESS      = COMPRESS
    TABLES
      DATA          = RESULT
    EXCEPTIONS
      COMMAND_ERROR = 1
      TCPIP_ERROR   = 2.
  LOOP AT RESULT.
    WRITE AT / RESULT-LINE.
  ENDLOOP.
  REFRESH RESULT.
* 将本地文件放到目标ftp文件夹中
  CONCATENATE 'put ' FILENAME INTO CMD SEPARATED BY SPACE.
  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      HANDLE        = HDL
      COMMAND       = CMD
      COMPRESS      = COMPRESS
    TABLES
      DATA          = RESULT
    EXCEPTIONS
      COMMAND_ERROR = 1
      TCPIP_ERROR   = 2.
  LOOP AT RESULT.
    WRITE AT / RESULT-LINE.
  ENDLOOP.
  REFRESH RESULT.

* 断开FTP连接
  CALL FUNCTION 'FTP_DISCONNECT'
    EXPORTING
      HANDLE = HDL.
* 断开RFC链接
  CALL FUNCTION 'RFC_CONNECTION_CLOSE'
    EXPORTING
      DESTINATION = DEST
    EXCEPTIONS
      OTHERS      = 1.

3.运行效果

2
3
4


版权声明:本文为qq_30797051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。