DATA :
p_host TYPE char64 VALUE '192.168.100.64 21'," IP
p_folder TYPE char255 VALUE '/aa/bb/', "ftp 路径
p_uname TYPE char30 VALUE 'sys' , "用户名称
p_pwd TYPE char30 VALUE 'psword' . "用户密码
DATA : dest LIKE rfcdes-rfcdest VALUE 'SAPFTP',
compress TYPE c VALUE 'N'.
DATA: hdl TYPE i,
key TYPE i VALUE 26101957,
slen TYPE i,
cmd(80) TYPE c.
slen = strlen( p_pwd ).
* "获取加密密码 保存到P_PWD
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
source = p_pwd
sourcelen = slen
key = key
IMPORTING
destination = p_pwd.
* 连接ftp服务器
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
user = p_uname
password = p_pwd
host = p_host
rfc_destination = dest
IMPORTING
handle = hdl. "连接的句柄
"下载的操作 start ...
"执行FTP命令 CD 打开目标ftp的文件夹
"now open the target ftp folder
DATA : ftp_url TYPE char255 .
ftp_url = p_folder . "拼接ftp url 比如要下载的文件在ftp 路径/aa/bb/ 下,那么 ftp_url = '/aa/bb'
"进入ftp要下载文件的路径
concatenate 'cd' ftp_url into cmd SEPARATED BY space."这个拼接是在cd后面加一个空格
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.
DATA fname like rcgiedial-iefile."本地路径
fname = 'C:\temp\'."下载目录 C:\temp 这个是你要下载到本地什么位置
* 打开本地ftp文件夹
concatenate 'lcd' fname 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.
DATA : ftp_filename TYPE char255 .ut
ftp_filename = 'aa.DOCX' "这个就是你要下载的文件名称
"将ftp文件夹目标文件中放入本地文件
CONCATENATE 'get ' ftp_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.
IF SY-SUBRC <> 0.
message '下载失败,失败原因可能是C盘下没有temp路径,请建立再次下载' TYPE 'I'.
ELSE.
message '下载成功到C:\temp\路径下' TYPE 'I'.
ENDIF.
* 断开FTP连接
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = hdl.
* 断开RFC链接
CALL FUNCTION 'RFC_CONNECTION_CLOSE'
EXPORTING
destination = dest
EXCEPTIONS
OTHERS = 1.