[英]Upload file to FTP Server using Indy
我無法使用Indy for Lazarus將文件上傳到我的000webhost.com FTP服務器。 我已經使用Windows命令提示符測試了ftp連接,它運行正常。 這些是我的設置(IdFTP):
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úÁÕÖîÖ€)€¶K...ÅõÞl%ÇðåÀ¨Á“§pp
A%~ßï7!ƒDªÉ[... O_£P *¡°z1K¢€^ hΨERPö/
üð΃ç±ïpļƒÏƒ<Ò1ì
¿Á{»(g {å¥r ...Ž¹öÐR_JúѯuBûŸ€Pp6o¯c[JgžÎ¿Èà|||VJþz'0è-`BO @ T
如果格式正確,響應將如下所示:
我無法直接在這里放置格式化文本。
服務器工作得很好,我試圖上傳到的目錄被修改為777,我發現文件的大小(我要上傳的)不超過3 KB。
有任何想法嗎?
多年來,我與Indy Ftp有點掙扎。 在某些時候,我轉向OverbyteIcs的替代(免費)Ftp客戶端(單擊ICS,然后單擊下載ICS-V8.16(2015年4月)) 。 如果您不反對使用免費軟件包,以下代碼將完成這項工作:
uses
...
OverbyteIcsFtpCli;
procedure FtpUploadFile(
HostName: String;
UserName: String;
Password: String;
UploadFileName: String;
ToHostDir : String );
var
FTP: TFtpClient;
begin
FTP := TFtpClient.Create(nil);
try
FTP.HostName := HostName;
FTP.Passive := True;
FTP.Binary := True;
FTP.Username := UserName;
FTP.Password := Password;
FTP.Port := '21';
if not FTP.Open then
raise Exception.Create('Failed to connect: ' + FTP.ErrorMessage);
if (not FTP.User) or (not FTP.Pass) then
raise Exception.Create('Failed to login: ' + FTP.ErrorMessage);
FTP.HostDirName := ToHostDir;
if not FTP.Cwd then
raise Exception.Create('Failed to change dir: ' + FTP.ErrorMessage);
FTP.LocalFileName := UploadFileName;
FTP.HostFileName := ExtractFileName(UploadFileName);
if not FTP.Put then
raise Exception.Create('Failed to upload file: ' + FTP.ErrorMessage);
finally
FTP.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FtpUploadFile('rubilaxe.hostoi.com',
'******', '******',
IncludeTrailingPathDelimiter(
ExtractFilePath(Application.ExeName) ) +'datafile.zip',
'/files' );
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.