使用简单的代码,例如:
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)
我得到以下结果:
我究竟做错了什么?
谢谢.
Rem*_*eau 13
该应用程序冻结,因为Indy使用阻止操作.代码正在运行时,主消息循环未运行,因此在cxButton1Click()退出之前不会处理新消息.要解决此问题,请将TIdAntiFreeze组件放在您的组件上TForm,或者将TIdFTP代码移动到单独的工作线程,然后在需要时使用TIdSync或TIdNotify安全地更新UI.
如果您以ASCII模式而不是二进制模式传输文件,该文件将"损坏".确保该TIdFTP.TransferType属性设置为ftBinary.Indy 9及更早版本默认为ftBinary,但Indy 10默认为ftASCII(以匹配FTP协议规范).