delphi實現FTP上傳與下載


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;
    dlgOpen1: TOpenDialog;
    btn1: TButton;
    mmo1: TMemo;
    btn2: TButton;
    btn3: TButton;
    edt1: TEdit;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure IdFTP1Status(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: String);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses  IdFTPList, IdFTPCommon;

//這個上傳和下載 是 純用 idftp 客戶端 來達到 下載和上傳的功能, 沒有寫到ftp服務端的東西

{
 本程序是一個ftp  demo程序,我用windows信息服務在本機建立了一個ftp服務,
 本機IP:192.168.10.99
 用戶名:cc  my
 密碼:1  qwert
}
procedure TForm1.btn1Click(Sender: TObject);
var
  tr : Tstrings;
begin  //連接
  tr := TStringlist.Create;
  //IdFTP1.Host := '192.168.10.99'; //FTP服務器地址
  IdFTP1.Host := '127.0.0.1'; //FTP服務器地址
  IdFTP1.Port:= 2121; //注意端口號,這里不是默認的21,而是你自己設定的值
  IdFTP1.Username := 'my'; //FTP服務器用戶名
  IdFTP1.Password := 'qwert'; //FTP服務器密碼

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

  edt1.Text := IdFTP1.RetrieveCurrentDir;//得到初始目錄
  //IdFTP1.ChangeDir('client'); //進入到client子目錄
  //IdFTP1.ChangeDir('..'); //回到上一級目錄
  IdFTP1.List(tr); //得到client目錄下所有文件列表
  mmo1.Lines.Assign(tr);
  tr.Free;
end;
 


procedure TForm1.btn2Click(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,ExtractFilePath(Application.ExeName)+tfname,True,True); //下載到本地,並為覆蓋,且支持斷點續傳
    end;
  end;
end;

procedure TForm1.btn3Click(Sender: TObject);
var
  fi : string;
begin  //上傳
  if dlgOpen1.Execute then
  begin
     fi := dlgOpen1.FileName;
    //IdFTP1.Put('f:/測試文檔樣本.rar','測試文檔樣本.rar');//上傳,
      IdFTP1.Put(fi,ExtractFileName(fi));
  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;
 


end.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM