我无法上传文件到我的000webhost.com使用Indy for Lazarus的FTP服务器。我已经用Windows命令提示符测试了ftp连接,并且它工作正常。这些是我的设置(IdFTP):使用Indy将文件上传到FTP服务器
IdFTP1.Host:='shabala.com';
IdFTP1.Passive:=True;
IdFTP1.TransferType:=ftBinary;
IdFTP1.Username:='******';
IdFTP1.Password:='******';
IdFTP1.Port:=21;
这是我用它来打电话给我TIdFTP组件的代码,IdFTP1:
IdFTP1.Connect(True);
//IdFTP1.ChangeDir('/Sessions');
IdFTP1.Put(GetCurrentDir+'\'+Token+'.cmd',Token+'.cmd', False);
IdFTP1.Quit;
IdFTP1.Disconnect;
其中变量Token
声明为:
Token: String;
当我第一次运行该程序时,它保持冷冻状态,我声明了一个TIdAntiFreeze组件以防止它冻结。 所以,这是现在发生的情况:有时程序工作正常,但没有文件传输到服务器(如果我尝试重复上载,它会给我一个EIdAlredyConnected错误),有时(如果我稍微更改代码,没有额外的)它给我一个奇怪的消息EIdProtocolReplyError。我试图捕获异常,并让我的程序,以显示消息,我有一些奇怪的字符:
$£ïtúÁÕÖ100)€¶K...ÅõÞl%ÇðåÀ¨Á“§pp
A%~ßï7!ƒDªÉ[... O_£P *¡°z1K¢ħ€Î¨ERPö/
üð΃ç±ïpļƒÏƒ<Ò1ì
¿A {»(克{A¥ - [R ...Ž¹öÐR_JúѯuBûŸ€ŒPp6o¯ C [JgžÎ¿Èà|Ä€VJþz'0è-`BO @ T
的响应看起来像这样如果正确格式化:
我无法直接在此格式化文本。
服务器工作得很好,我试图上传到的目录是chmodded到777,我发现文件的大小(我想上传)不大于3 KB。
任何想法?
通过“窃听”我想你的意思是“冻结” - 因为你试图使用'TIdAntiFreeze'解决呢? –
是的。程序分配给的按钮保持“单击状态”。这是一个TBCButton(包BGRAControls)。此外,应用程序没有响应(如果我点击表单,它崩溃了)。 @JerryDodge – TheGreenOmega
这是因为'TIdFTP'在忙于工作时阻塞调用线程(就像所有Indy的组件一样)。如果调用线程是主UI线程,则可以防止它及时处理新消息,除非使用'TIdAntiFreeze'。最好将'TIdFTP'移动到工作线程。 –