簡體   English   中英

使用Indy將文件上傳到FTP服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM