实现FTP的文件上传与下载

SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF }
.L0S31 { font-style: italic; color: #808080 }
.L0S32 { color: #3399FF }
.L0S33 { color: #4DA619 }
.L0S52 { color: #0000FF }
.L0S55 { color: #800080 }
.L0S70 { color: #808080 }

*FTP_CONNECT:通过账号连接FTP

*FTP_COMMAND:执行FTP操作命令(注意,程序中所有命令必须为小写)

*lcd:指定本地文件夹路径

*cd:指定FTP文件夹路径

*put<filename>:上传文件

*get<filename>:下载文件

*FTP_SERVER_TO_R3:将FTP上的指定文本文件数据读取到内表

*FTP_DISCONNECT:关闭FTP连接

DATA:key TYPE i VALUE 2610957,

trfcdest LIKE rfcdes-rfcdest,

thandle TYPE i.

INCLUDE:<icon>.

*定义输入界面

SELECTION-SCREEN:BEGIN OF BLOCK ftplogin WITH FRAME TITLE text-001.

PARAMETERS:p_user(45) LOWER CASE OBLIGATORY MEMORY ID usr,

p_pwd(45) MODIF ID pwd LOWER CASE  OBLIGATORY MEMORY ID pwd,

p_host(15) MEMORY ID hos OBLIGATORY,

ftp_path(30) MEMORY ID fpos OBLIGATORY.

SELECTION-SCREEN:END OF BLOCK ftplogin.

SELECTION-SCREEN:BEGIN OF BLOCK upload WITH FRAME TITLE text-002.

PARAMETERS:p_uppath(45),

p_file(20).

SELECTION-SCREEN:BEGIN OF LINE.

SELECTION-SCREEN:PUSHBUTTON 1(20) pubu USER-COMMAND upload.

SELECTION-SCREEN:END OF LINE.

SELECTION-SCREEN:END OF BLOCK upload.

SELECTION-SCREEN:BEGIN OF BLOCK download WITH FRAME TITLE text-003.

PARAMETERS:dl_path(45),

dl_file(20).

SELECTION-SCREEN:BEGIN OF LINE.

SELECTION-SCREEN:PUSHBUTTON 1(20) gebu USER-COMMAND download.

SELECTION-SCREEN:PUSHBUTTON 24(30) shbu USER-COMMAND itab_dl.

SELECTION-SCREEN:END OF LINE.

SELECTION-SCREEN:END OF BLOCK download.

AT SELECTION-SCREEN OUTPUT.

*对密码输入栏进行加密处理

PERFORM mask_pwd.

*给各按钮加入文本及图标

WRITE icon_outgoing_object AS ICON TO pubu.

CONCATENATE pubu ‘Upload FTP‘ INTO pubu SEPARATED BY space.

WRITE icon_incoming_object AS ICON TO gebu.

CONCATENATE gebu ‘FTP Download‘ INTO gebu SEPARATED BY space.

WRITE icon_write_file AS ICON TO shbu.

CONCATENATE shbu ‘Internal table download‘ INTO shbu SEPARATED BY space.

AT SELECTION-SCREEN.

PERFORM ftpconnect.

IF sy-subrc <> 0.

MESSAGE i001(00) WITH ‘Can‘‘t connect FTP!‘.

EXIT.

ENDIF.

MESSAGE s001(00) WITH ‘FTP connect OK!‘.

CASE sy-ucomm.

WHEN ‘ONL1‘.

PERFORM ftpdisconnect.

EXIT.

ENDCASE.

*执行FTP功能

PERFORM ftp_execute.

*关闭FTP连接

PERFORM ftpdisconnect.

*改变密码输入框显示属性,实现密码保护

FORM mask_pwd.

LOOP AT SCREEN.

IF screen-name = ‘P_PWD‘.

screen-invisible = ‘1‘.

MODIFY SCREEN.

CONTINUE.

ENDIF.

ENDLOOP.

ENDFORM.                    "mask_pwd

*通过IP、用户名、密码连接FTP服务器

FORM ftpconnect.

DATA:thosts(45),tusers(45),tpword(45).

thosts = p_host.

tusers = p_user.

tpword = p_pwd.

*对密码数值进行加密解析处理

CALL ‘AB_RFC_X_SCRAMBLE_STRING‘ "System Function

ID ‘SOURCE‘ FIELD tpword

ID ‘KEY‘ FIELD key

ID ‘SCR‘ FIELD ‘X‘

ID ‘DESTINATION‘ FIELD tpword

ID  ‘DSTLEN‘ FIELD 64.

*定义RFC连接目标,前后台执行时不同

IF sy-batch = ‘X‘.

trfcdest = ‘SAPFTPA‘.

ELSE.

trfcdest = ‘SAPFTP‘.

ENDIF.

*该函数可以定义有网关时账户密码,一般公司内部访问时无此设置

CALL FUNCTION ‘FTP_CONNECT‘

EXPORTING

user            = tusers

password        = tpword

host            = thosts

rfc_destination = trfcdest

IMPORTING

handle          = thandle

EXCEPTIONS

not_connected   = 1

OTHERS          = 2.

ENDFORM.                    "ftpconnect

*设置结束时关闭SAP

FORM ftpdisconnect.

CALL FUNCTION ‘FTP_DISCONNECT‘

EXPORTING

handle = thandle.

ENDFORM.                    "ftpdisconnect

*通过SAP执行命令上传或下载FTP文件

FORM ftp_execute.

DATA:tsubrc LIKE sy-subrc.

DATA:BEGIN OF com OCCURS 0,

cmd(100) TYPE c,

END OF com.

DATA:BEGIN OF res OCCURS 0,

line(100) TYPE c,

END OF res.

*指定FTP文件夹路径

IF NOT ftp_path IS INITIAL.

CONCATENATE ‘cd‘ ftp_path INTO com-cmd SEPARATED BY ‘‘.

APPEND com.

ENDIF.

CASE sy-ucomm.

WHEN ‘UPLOAD‘.

*指定上传文件夹路径及上传文件命令

CONCATENATE ‘lcd‘ p_uppath INTO com-cmd SEPARATED BY ‘‘.

APPEND com.

CONCATENATE ‘put‘ p_file INTO com-cmd SEPARATED BY ‘‘.

APPEND com.

WHEN ‘DOWNLOAD‘.

*指定下载文件夹路径及下载文件命令

CONCATENATE ‘lcd‘ dl_path INTO com-cmd SEPARATED BY ‘‘.

APPEND com.

CONCATENATE ‘get‘ dl_file INTO com-cmd SEPARATED BY ‘‘.

APPEND com.

ENDCASE.

LOOP AT com FROM 1.

IF com-cmd <> ‘‘.

*执行FTP指令
      
CALL FUNCTION ‘FTP_COMMAND‘
        
EXPORTING
          handle        
= thandle
          command       
= com-cmd
        
TABLES
          
data          = res
        
EXCEPTIONS
          tcpip_error   
= 1
          command_error 
= 2
          data_error    
= 3
          
OTHERS        = 4.

*当执行失败时回执数据并退出               .
      
IF sy-subrc <> 0.
        
CASE ‘UPLOAD‘.
            
MESSAGE e001(00) WITH ‘FTP UPLOAD FAIL!‘.
          
WHEN ‘DOWNLOAD‘.
            
MESSAGE e001(00) WITH ‘FTP DOWNLOAD FAIL!‘.
        
ENDCASE.
        
EXIT.
      
ELSE.

*根据不同按钮的功能码判断程序执行逻辑及回执信息,当选择从内部下载功能时转入子程序
        
CASE sy-ucomm.
          
WHEN ‘UPLOAD‘.
            
MESSAGE s001(00) WITH ‘FTP UPLOAD SUCCESS!‘.
          
WHEN ‘DOWNDLOAD‘.
            
MESSAGE s001(00) WITH ‘FTP DOWNDLOAD SUCCESS!‘.
          
WHEN ‘ITAB_DL‘.
            
PERFORM dl_itab USING thandle dl_path dl_file.
        
ENDCASE.
      
ENDIF.
    
ENDIF.
  
ENDLOOP.

CLEAR:com,res,tsubrc.
  
REFRESH: com,res.

ENDFORM.                    "ftp_execute

*将FTP文本类型文件数据读取到内表

FORM dl_itab USING thandle TYPE i value(filepath) TYPE  c filename TYPE c.
  
DATA:BEGIN OF blob OCCURS 0,
    
line(255) TYPE c,
    
END OF blob.

*连接字符串定义本地文件具体路径
  
CONCATENATE filepath filename INTO filepath.

*将FTP文本类型文件数据读取到内表

*若所读FTP文件为非文本文件(*.txt,*.dat)时将出现错误
  
CALL FUNCTION ‘FTP_SERVER_TO_R3‘
    
EXPORTING
      handle 
= thandle
      fname  
= filename
    
TABLES
      blob   
= blob.

*读取文件失败时退出程序并回执错误
  
IF sy-subrc <> 0.
    
MESSAGE e001(00) WITH ‘Read FTP file FAIL!‘.
    
EXIT.
  
ENDIF.

*将内表数据下载到本地文件
  
CALL FUNCTION ‘WS_DOWNLOAD‘
    
EXPORTING
      filename            
= filepath
      filetype            
= ‘DAT‘
    
TABLES
      data_tab            
= blob
    
EXCEPTIONS
      file_open_error     
= 1
      file_write_error    
= 2
      invalid_filesize    
= 3
      invalid_table_width 
= 4
      invalid_type        
= 5.

*将数据写入本地文件失败时回执错误
  
IF sy-subrc <> 0.
    
MESSAGE e001(00) WITH ‘FTP Download By Internal table FAIL!‘.
  
ELSE.
    
MESSAGE s001(00) WITH ‘FTP Download By Internal table SUCCESS!‘.
  
ENDIF.

ENDFORM.                    "dl_itab

时间: 2024-10-28 23:38:57

实现FTP的文件上传与下载的相关文章

【ABAP系列】SAP ABAP 实现FTP的文件上传与下载

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 实现FTP的文件上传与下载 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 在SAP的实际应用中,经常会需要将生成的文件上传到FTP,或从FTP下载相关文档数据.本例实现将本地指定文件上传到FTP,及从FTP下载文件到本地的功能. 从FTP复制文件共有两种方式,一种是直接复制文件,另

使用C#实现FTP的文件上传和下载【转】

参考博文:http://blog.163.com/[email protected]/blog/static/1098136182013101525615577/

C# 之 FTP服务器中文件上传与下载(三)

通过上一篇博客<C# 之 FTP服务器中文件上传与下载(二)>,我们已经实现将文件上传到我们创建的FTP服务器.今天我们就一起来看看怎么样实现从FTP服务器中下载我们所需要的文件.         我们想实现的效果是在页面上有一个超链接,超链接显示为我们想要下载的文件名.点击该文件名进入下载页面.首先我们在前台插入一个超链接,但是这个超链接为后台拼接的超链接. using System; using System.Collections.Generic; using System.Linq;

C# 之 FTP服务器中文件上传与下载(四)

        通过上一篇博客<C# 之 FTP服务器中文件上传与下载(三)>,我们已经实现将文件从我们创建的FTP服务器中下载到本地.今天就最后给大家讲解一下怎么对FTP中的文件进行重命名和删除操作. 首先在前台添加两个重命名和删除的按钮 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Defaul

FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现,分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 [java] view plaincopy package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.n

【问题分析】FTP文件上传与下载

问题描述:通常应用服务器与文件服务器分别在不同的机器上,涉及到文件的上传与下载.通过建立网络映射盘的形式,将文件服务器保存文件的文件夹映射到应用服务器的某个盘符下,经过试验,在tomcat下两台笔记本是可以实现的,但是在生产环境的websphere下试验,经过多番尝试,仍然实现不了. 问题分析:采用FTP的方式实现文件的上传与下载功能,在Java代码中编写客户端的上传与下载,在文件服务器上,直接装一个FTP服务器软件即可.注意生产环境的防火墙以及客户是否允许使用FTP. 解决方案: 工程中导入J

Java实现FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.net.Telnet

Linux 指令篇:文件上传和下载 lrzsz

[ "lrzsz"一般用于SecureCRT ssh中使用 ] 简介:rz,sz是早期Linux/Unix同Windows进行ZModem文件传输的命令行工具.rz ,sz 是非常古老的zmodem协议使用的上传下载命令,早就被抛弃了的东西,目前的发行版基本都不再预装. 优点:比ftp命令方便,而且服务器不用打开FTP服务. 命令sz:将选定的文件发送(send)到本地机器 命令rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器. lrzsz安装方法: [[e

jsp文件上传、下载

一.文件上传 上传文件是Web开发中经常要用到的功能:例如在基于B/S的人事信息管理系统中上传照片,在新闻发布系统中上传图片等等.....要实现文件上传功能,就需要综合利用java中的文件输入和输出相关的类. 在TCP/IP中,最早出现的文件上传机制是FTP.它是将文件由客服端发送到服务器的标准机制,能够考虑到跨平台的文本和二进制格式文件.但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp 运行机制所决定的. 下面是上传文件的jsp页面: [html] view plaincopypr