现在的位置: 首页 > 综合 > 正文

一个Ftp上传下载的简单例子

2017年12月02日 ⁄ 综合 ⁄ 共 2789字 ⁄ 字号 评论关闭

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdFTP;

type
  TForm1 = class(TForm)
    IdFTP1: TIdFTP;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    OpenDialog1: TOpenDialog;
    Edit1: TEdit;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: String);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses
IdFTPList, IdFTPCommon;

{$R *.dfm}

{
 本程序是一个ftp  demo程序,我在用windows信息服务在本机建立了一个ftp服务,
 本机IP:192.168.0.91
 用户名:hehaiwei
 密码:123

运行compmgmt.msc,(计算机管理)中选择用户,添加一个新的用户,并设置密码.

再回到管理工具的ftp中,设置一下权限和目录,就可以测试了.
}

procedure TForm1.Button1Click(Sender: TObject);
var
  tr : Tstrings;
begin  //连接
  tr := TStringlist.Create;
  IdFTP1.Host := '192.168.0.91'; //FTP服务器地址
  IdFTP1.Username := 'hehaiwei'; //FTP服务器用户名
  IdFTP1.Password := '123'; //FTP服务器密码

  IdFTP1.Connect();  //连接到ftp

  Edit1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目录
  IdFTP1.ChangeDir('readme'); //进入到client子目录
  //IdFTP1.ChangeDir('..'); //回到上一级目录
  IdFTP1.List(tr); //得到client目录下所有文件列表
  Memo1.Lines.Assign(tr);
  tr.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  tt :TIdFTPListItems;
  t : TIdFTPListItem;
  i : integer;
  tfname : String;
begin  //下载
  Label1.Caption := IdFTP1.DirectoryListing.Items[0].FileName;
  IdFTP1.TransferType := ftBinary; //指定为二进制文件  或文本文件ftASCII
  for i:=0 to IdFTP1.DirectoryListing.Count-1 do
  begin
    tt := IdFTP1.DirectoryListing; //得到当前目录下文件及目录列表
    t := tt.Items[i]; //得到一个文件相关信息
    Label1.Caption :=t.Text;  //取出一个文件信息内容
    tfname := t.FileName;
    showmessage(t.OwnerName+'  '+t.GroupName+'  '+t.FileName+'   '+t.LinkedItemName);
    if IdFTP1.DirectoryListing.Items[i].ItemType = ditFile then //如果是文件
    begin
      IdFTP1.Get(tfname,'F:/FTPLocaltest/'+tfname,True,True); //下载到本地,并为覆盖,且支持断点续传
    end;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  fi : string;
begin  //上传
  if OpenDialog1.Execute then
  begin
     fi := OpenDialog1.FileName;
    IdFTP1.Put(fi,'测试文档样本.rar');//上传,
  end;
end;

procedure TForm1.IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: String);
begin
  case  AStatus of
    hsResolving  : showmessage('hsResolving');
    hsConnecting: showmessage('hsConnecting');
    hsConnected: showmessage('hsConnected');
    hsDisconnecting: showmessage('hsDisconnecting');
    hsDisconnected: showmessage('hsDisconnected');
    hsStatusText: showmessage('hsStatusText');
    ftpTransfer: showmessage('文件传送完毕。');
    ftpReady: showmessage('准备传送文件....');
    ftpAborted: showmessage('传送失败');
  end;

  //showmessage(AStatusText);
end;

 

procedure TForm1.Button4Click(Sender: TObject);
begin
close
end;

end. 

抱歉!评论已关闭.