Indy FTP无法上传

时间:2011-11-29 22:08:56

标签: delphi ftp indy

使用简单的代码,例如:

  procedure TForm1.cxButton1Click(Sender: TObject);
  begin
  ftp.Host := 'domain';
  ftp.Username := 'user';
  ftp.Password := 'password';
  ftp.Connect;
  ftp.Put('C:\_Projects\testpicture.JPG');
  ftp.Quit;
  ftp.Disconnect;
  end;

我得到以下结果:

  • 上传时应用程序冻结(ergo无法查看进度条位置)。
  • 上传的文件已损坏(破坏超过几个字节的任何内容)。

我到底在做什么?

谢谢。

1 个答案:

答案 0 :(得分:13)

该应用程序冻结,因为Indy使用阻止操作。代码正在运行时,主消息循环未运行,因此在cxButton1Click()退出之前不会处理新消息。要解决此问题,请将TIdAntiFreeze组件放在TForm上,或者将TIdFTP代码移至单独的工作线程,然后使用TIdSync或{{1}在需要时安全地更新UI。

如果您以ASCII模式而不是二进制模式传输文件,该文件将“损坏”。确保TIdNotify属性设置为TIdFTP.TransferType。 Indy 9及更早版本默认为ftBinary,但Indy 10默认为ftBinary(以匹配FTP协议规范)。