The*_*ega 2 delphi ftp upload indy lazarus
我无法使用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%ÇðåÀ¨Á"§ppA¨
%〜ßï7!ƒDªÉ[... o_£P*¡z1K¢H€Î¨Pr//
Äð΃ç±ï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;