我無法上傳文件到我的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'移動到工作線程。 –