用delphi 7 实现的一个简易 FTP 软件

摘要: 在做网站的时候,少不了用FTP,我们通常会用 flashxp. FileZilla,cuteftp,8uftp 等等。难道FTP 就仅仅适用于做网站吗?不是的,FTP 是文件传输协议。涉及到文件传输的系统,都可以用FTP来实现,关键是看具体的项目是不是适合用FTP来解决。像网站这种系统,就适合用FTP,但如果是对系统要求比较高,在传输文件的时候,还要做其它处理等。甚至可能直接用底层的SOCKET用流得方式传文件,更好的自己控制,扩展。当然FTP 也是基于TCP/IP SOCKET 实现的。上面提到的是使用人家的FTP软件。但有的项目需要自己集成FTP客户端来实现文件的上传下载。集成的好处是:1.有较好的用户体验。用户在一个系统中完成所有的事情,不需要切换。

在做网站的时候,少不了用FTP,我们通常会用 flashxp. FileZilla,cuteftp,8uftp 等等。难道FTP 就仅仅适用于做网站吗?不是的,FTP 是文件传输协议。涉及到文件传输的系统,都可以用FTP来实现,关键是看具体的项目是不是适合用FTP来解决。
像网站这种系统,就适合用FTP,但如果是对系统要求比较高,在传输文件的时候,还要做其它处理等。甚至可能直接用底层的SOCKET用流得方式传文件,更好的自己控制,扩展。当然FTP 也是基于TCP/IP SOCKET 实现的。

上面提到的是使用人家的FTP软件。但有的项目需要自己集成FTP客户端来实现文件的上传下载。集成的好处是:
1.有较好的用户体验。用户在一个系统中完成所有的事情,不需要切换。
2.集成的FTP客户端,自己控制,利于扩展。

用DELPHI7 如何打造一个自己需要的FTP客户端呢。其实有indy组件:里面有TidFTP component. 直接可以实现 FTP 客户端.

[B]连接和断开[/B]

procedure TfrmFtp.ConnectButtonClick(Sender: TObject);
begin
  ConnectButton.Enabled := false;
  if IdFTP1.Connected then try
    if TransferrignData then IdFTP1.Abort;
    IdFTP1.Quit;
  finally
    CurrentDirEdit.Text := '/';
    DirectoryListBox.Items.Clear;
    SetFunctionButtons(false);
    ConnectButton.Caption := '连接(&c)';
    ConnectButton.Enabled := true;
    ConnectButton.Default := true;
  end
  else with IdFTP1 do try
    Username := UserIDEdit.Text;
    Password := PasswordEdit.Text;
    Host := FtpServerEdit.Text;
    Connect;
    Self.ChageDir(CurrentDirEdit.Text);
     SetFunctionButtons(true);
    SaveFTPHostInfo(FtpServerEdit.Text, 'FTPHOST');
  finally
    ConnectButton.Enabled := true;
    if Connected then begin
      ConnectButton.Caption := '断开(&D)';
      ConnectButton.Default := false;
    end;
  end;
end;


上传文件
procedure TfrmFtp.UploadButtonClick(Sender: TObject);
begin
  if IdFTP1.Connected then begin
    if UploadOpenDialog1.Execute then
    try
      SetFunctionButtons(false);
      try
      IdFTP1.TransferType := ftBinary;
      
      IdFTP1.Put(UploadOpenDialog1.FileName, ExtractFileName(UploadOpenDialog1.FileName));
      ChageDir(idftp1.RetrieveCurrentDir);
      except
        showmessage('上传错误');
      end;
    finally
      SetFunctionButtons(true);
    end;
  end;
end;


[B]下载文件[/B]
procedure TfrmFtp.DirectoryListBoxDblClick(Sender: TObject);
Var
  Name{, Line}: String;
begin
  if not IdFTP1.Connected then exit;
  //Line := DirectoryListBox.Items[DirectoryListBox.ItemIndex];
  Name := IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].FileName;
  if IdFTP1.DirectoryListing.Items[DirectoryListBox.ItemIndex].ItemType = ditDirectory then begin
    // Change directory
    SetFunctionButtons(false);
    ChageDir(Name);
    SetFunctionButtons(true);
  end
  else begin
    try
      SaveDialog1.FileName := Name;
      if SaveDialog1.Execute then begin
        SetFunctionButtons(false);

        IdFTP1.TransferType := ftBinary;
        BytesToTransfer := IdFTP1.Size(Name);

        if FileExists(Name) then begin
//          case MessageDlg('File aready exists. Do you want to resume the download operation?',
          case MessageDlg('文件巳经存在. 你是否想更改文件件名进行下载操作?',
            mtConfirmation, mbYesNoCancel, 0) of
            mrYes: begin
              BytesToTransfer := BytesToTransfer - FileSizeByName(Name);
              IdFTP1.Get(Name, SaveDialog1.FileName, false, true);
            end;
            mrNo: begin
              IdFTP1.Get(Name, SaveDialog1.FileName, true);
            end;
            mrCancel: begin
              exit;
            end;
          end;
        end
        else begin
          IdFTP1.Get(Name, SaveDialog1.FileName, false);
        end;
      end;
    finally
      SetFunctionButtons(true);
    end;
  end;
end;


上面列出了常用的核心方法。当然还有改变目录等,这些处理起来,也就比较简单了。

在DELPHI7 IDE 中样式截图;



编译项目后运行。结果图如下:



可执行文件下载测试:
点击下载此文件

如果有需要源代码的,可以留言,留下Email,其实上面已经将核心代码贴出大部分了。

要源码的比较多,干脆放出来了,这里下载: http://www.yihaomen.com/article/myproduct/596.htm

上一篇: Django Form 自定义试用笔记(附工程源码下载)
下一篇: 基于OpenOffice的PDF转换引擎安装及配置使用说明

Avatar

楠木头 评论于: 2015-09-06

老师··看到了麻烦发一份学习,348956734@qq.com  十分感谢
[reply=yihaomen,2015-09-08 09:58 PM]http://www.yihaomen.com/article/myproduct/596.htm 这里去下载吧。[/reply]

Avatar

ftp 评论于: 2015-08-19

请给我也发一份谢谢14324073@qq.com

Avatar

hadis1023 评论于: 2015-05-26

请老师也给我发一份原码,一定对我有不小的帮助。邮箱:jl1023@sina.com,我用IDFTP只要中文就乱码,期待您的指导,谢谢!

Avatar

wujf 评论于: 2015-05-07

老师你好
正学习delphi ,给我也发一份吧,先谢过老师您了。
970216138@qq.com

Avatar

lanlan 评论于: 2015-04-16

老师,我需要份源代码,邮箱89019474@qq.com

Avatar

少女荷 评论于: 2015-04-13

375984044@qq.com 麻烦看到后发一下好吗 万分感谢
[reply=yihaomen,2015-04-14 04:54 PM]已经发送了,注意查收邮件.[/reply]

Avatar

网事如烟 评论于: 2015-02-05

帮忙发一份源码,谢谢!1121962190@QQ.com

Avatar

kaluka 评论于: 2014-12-29

老师,能否发一份源代码?需要您!m_m9@qq.com。谢谢!:)

Avatar

xueshan 评论于: 2014-12-19

老师:
我刚接手一个delphi7 的软件的维护工作,需要一份上传下载代码,给我发一份吧,我的邮箱是yuan12888@163.com,谢谢!

Avatar

zy 评论于: 2014-12-14

老师:偶需要一份源码。邮箱:909332700@qq.com
我用IDFtp链接一直有socket error 10053的错误,不知何故
[reply=yihaomen,2014-12-15 12:38 AM]已经发送了。[/reply]

Avatar

好学者 评论于: 2014-09-26

给我也发一份吧,谢谢,568659197@qq.com

Avatar

csz 评论于: 2014-09-10

老师您好!我也想要一份源码。谢谢![/quote] 710815935@qq.com

Avatar

csz 评论于: 2014-09-10

老师您好!我也想要一份源码。谢谢!

Avatar

hy8030366 评论于: 2014-08-06

老师你好
正学习delphi需要这个,给我也发一份吧,谢谢!
13119513@qq.com

Avatar

wxh 评论于: 2014-06-27

老师,我需要份源代码,邮箱: wuxuehong66@aliyun.com

Avatar

wuping 评论于: 2014-06-07

老师,请给我一份源代码,谢谢! 12151807@qq.com

Avatar

wuping 评论于: 2014-06-07

老师,请给我一份原码,谢谢! 12151807@qq.com

Avatar

ayh 评论于: 2014-06-03

我的邮箱是
 ayh0418@qq.com

Avatar

delphi7入门者 评论于: 2014-05-28

老师您好!我需要一份源码,邮箱:228612242@qq.com,谢谢老师了
[reply=轻舞肥羊,2014-05-28 08:11 PM]已经发送到你邮箱了。[/reply]

Avatar

z87427690 评论于: 2014-05-03

老师:偶需要一份源码。邮箱:87427690@qq.com
谢谢!

Avatar

叶子 评论于: 2014-04-16

谢谢1048251273@qq.com
[reply=轻舞肥羊,2014-04-17 10:40 PM]已经发送,请查收。[/reply]

Avatar

妈妈吗 评论于: 2014-03-04

我要一份
nikeren@163.com
[reply=轻舞肥羊,2014-03-04 07:31 PM]已经发送,请查收[/reply]

Avatar

hcc 评论于: 2013-12-23

老师,给我份362055125@qq.com
[reply=轻舞肥羊,2013-12-23 04:40 PM]晚上回去给,在家的电脑上。[/reply]

Avatar

hcc 评论于: 2013-12-23

你好,给份源码362055125@qq.com

Avatar

小天 评论于: 2013-12-07

想要一份:33931282@163.com
[reply=轻舞肥羊,2013-12-08 11:59 PM]收件人邮件地址(33931282@163.com)不存在,邮件无法送达。 
host 163mx02.mxmail.netease.com[220.181.14.146] said: 550 User not found: 33931282@163.com (in reply to RCPT TO command)[/reply]

Avatar

onion 评论于: 2013-11-16

老师 ,给我一份源码,谢谢
[reply=轻舞肥羊,2013-11-17 01:40 PM]你的邮箱呢?[/reply]

Avatar

lilang911 评论于: 2013-06-03

请给我一份源码: lilang911@126.com

Avatar

gaoqing036 评论于: 2013-03-06

好,刘老师。我需要一份源码。邮箱:18637213@qq.com 谢谢,支持楼主.

Avatar

ggggpv 评论于: 2013-01-28

你好,刘老师。我需要一份源码。邮箱:94362213@qq.com
谢谢

Avatar

aaa 评论于: 2013-01-15

你好,刘老师。我需要一份源码。邮箱:1592827582@qq.com
谢谢

Avatar

flsmail 评论于: 2013-01-05

你好,我需要一份源码,邮箱:305283265@qq.com,谢谢,支持楼主

Avatar

foxing 评论于: 2012-09-22

你好,刘老师。我需要一份源码。邮箱:szyhkj#163.com(#就是AT标记)
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号