Indy FTP无法上传

Joh*_*erg 4 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;
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

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

我究竟做错了什么?

谢谢.

Rem*_*eau 13

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

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