Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit IdFTP1.Put (https://www.delphipraxis.net/138283-problem-mit-idftp1-put.html)

Evalon 6. Aug 2009 17:34


Problem mit IdFTP1.Put
 
Hallo,
ich möchte ein Programm schreiben mit welchem ich in einem Memo-Feld einen Text schreibe, diesen als html speichere und dann auf den FTP-Server hochladen kann. Dafür benutze ich die Indy FTP-Komponente (IdFTP).

Quelltext:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ftp.Host:='**************';
 ftp.Username:='*****';
 ftp.Password:='******';
 ftp.Connect;
 Memo1.Lines.SaveToFile(Programmpfad+'abc.html');
 ftp.Put(Programmpfad+'abc.html','abc.html',true);
end;
Wenn ich jetzt aber das Programm starte und Button1 klicke, friert das Programm ein und es tut sich nichts mehr. Kann mir jemand helfen woran das liegen könnte?

Vielen Dank schonmal,
Evalon

mjustin 6. Aug 2009 17:55

Re: Problem mit IdFTP1.Put
 
Zitat:

Zitat von Evalon
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ftp.Host:='**************';
 ftp.Username:='*****';
 ftp.Password:='******';
 ftp.Connect;
 Memo1.Lines.SaveToFile(Programmpfad+'abc.html');
 ftp.Put(Programmpfad+'abc.html','abc.html',true);
end;
Wenn ich jetzt aber das Programm starte und Button1 klicke, friert das Programm ein und es tut sich nichts mehr. Kann mir jemand helfen woran das liegen könnte?

Was ich prüfen würde:
  • Friert es schon beim Connect oder beim Put ein?
  • Funktioniert der Upload mit einem anderen FTP Client (FileZilla)?
  • Ist die Datei abc.html erfolgreich auf der lokalen Platte gespeichert worden?

Evalon 6. Aug 2009 18:21

Re: Problem mit IdFTP1.Put
 
Das Programm friert beim Put ein, mit Filezilla klappt alles einwandfrei und die Datei wird korrekt gespeichert. Was auch seltsam ist: beim letzten Versuch (ohne etwas geändert zu haben) bekam ich die Fehlermeldung "Im Projekt Projekt1.exe ist eine Exception der Klasse EIdProtocolReplyError aufgetreten. Meldung: 'abc.html: Append/Restart not permitted, try again'. Prozess wurde angehalten. [...]".
Das Mal davor ging das mit dem Hochladen und ich bekam einen Fehler mit "Listenindex überschreitet Maximum".

Warum passiert da teils etwas anderes obwohl ich nichts am Quelltext ändere?

mjustin 6. Aug 2009 18:44

Re: Problem mit IdFTP1.Put
 
Zitat:

Zitat von Evalon
Das Programm friert beim Put ein, mit Filezilla klappt alles einwandfrei und die Datei wird korrekt gespeichert. Was auch seltsam ist: beim letzten Versuch (ohne etwas geändert zu haben) bekam ich die Fehlermeldung "Im Projekt Projekt1.exe ist eine Exception der Klasse EIdProtocolReplyError aufgetreten. Meldung: 'abc.html: Append/Restart not permitted, try again'. Prozess wurde angehalten. [...]".
Das Mal davor ging das mit dem Hochladen und ich bekam einen Fehler mit "Listenindex überschreitet Maximum".

Warum passiert da teils etwas anderes obwohl ich nichts am Quelltext ändere?

Sieht so aus als ob der FTP Server, nachdem die Datei einmal mit FileZilla hochgeladen wurde (komplett oder teilweise?), einen weiteren Versuch blockiert. Wenn die Datei auf dem Server gelöscht wird, sollte das Verhalten dann wieder wie vorher sein.

Ist es die aktuelle Indy Version (10.5.6)? Im FTP Bereich hat sich da in den letzten Jahren noch so manches getan.

Viele Grüße,

Evalon 6. Aug 2009 19:30

Re: Problem mit IdFTP1.Put
 
Juchuu vielen Dank :-D

Ich habe mir jetzt Indy 9 runtergeladen (neuste Stable) und siehe da: es funktioniert :)

Danke für die schnelle Hilfe,

Gruß Evalon

mjustin 7. Aug 2009 05:58

Re: Problem mit IdFTP1.Put
 
Zitat:

Zitat von Evalon
Ich habe mir jetzt Indy 9 runtergeladen (neuste Stable) und siehe da: es funktioniert :)

Die "Neueste" Indy 9 mit IdFTP.pas aus 2004?
Nun, wenn es damit tatsächlich funktioniert ... ;)

Assertor 7. Aug 2009 07:50

Re: Problem mit IdFTP1.Put
 
Hi,

Zitat:

Zitat von Evalon
Ich habe mir jetzt Indy 9 runtergeladen (neuste Stable) und siehe da: es funktioniert :)

Indy 10 wird aber sicherlich nicht die Ursache des Problems sein, aber ohne weitere Diagnose läßt sich das nicht beweisen. Du hast Fehlermeldungen erhalten, die auf Verbindungsprobleme und die Gegenstelle hinweisen - vielleicht ist hier eine Anpassung der Optionen von IdFTP nötig...

Aber mit so wenig Informationen, kann man leider nicht sinnvoll helfen.

Nur soviel, bevor ein anderer das liest und wieder denkt "wußte ich es doch, Indy 10 hat Probleme": Nein, der FTP Transfer ist wirklich die Pflicht für Indy - also eine Aufgabe die regelmäßig genutzt und kontrolliert wird.

Gruß Assertor

Evalon 7. Aug 2009 08:51

Re: Problem mit IdFTP1.Put
 
@ mjustin: Ja die von 2004 aber es funktioniert. Hast du einen Downloadlink für 10.5.6 ? Auf der HP von Indyproject ist Indy 10 immernoch in Arbeit. :gruebel:

Assertor 7. Aug 2009 08:59

Re: Problem mit IdFTP1.Put
 
Hi,

Zitat:

Zitat von Evalon
@ mjustin: Ja die von 2004 aber es funktioniert. Hast du einen Downloadlink für 10.5.6 ? Auf der HP von Indyproject ist Indy 10 immernoch in Arbeit. :gruebel:

Ich bin zwar nicht Michael, aber hier ist der Download zu finden: http://indy.fulgan.com/ZIP/

Von dort bitte die IndyTiburon.zip laden.

Die Homepage ist noch in Arbeit, aber da es keine weiteren Helfer gibt, wird das noch dauern...

Gruß Assertor

Evalon 7. Aug 2009 10:14

Re: Problem mit IdFTP1.Put
 
Ok super vielen Dank :-D

Gruß Evalon

Sir Rufo 3. Nov 2009 11:49

Re: Problem mit IdFTP1.Put
 
Zitat:

Zitat von Assertor
Nur soviel, bevor ein anderer das liest und wieder denkt "wußte ich es doch, Indy 10 hat Probleme": Nein, der FTP Transfer ist wirklich die Pflicht für Indy - also eine Aufgabe die regelmäßig genutzt und kontrolliert wird.

Gruß Assertor

aha ... also nehmen wir jetzt mal Indy10 (v10.5.5 so wie bei Delphi 2010 dabei)
holen uns die Demo FTP-Client aus dem SVN
compilieren und schon geht das.

Tatsache, da tut sich was ...

Server: ftp.lancom.de
User: ftp
Pass: ftp

und bei Connect kommt "Illegal PORT Command!"

ah, ja ...

Welches Zauberwort braucht denn der Client, damit der auch mal anzeigt, was da so ist?

cu

Oliver

Assertor 3. Nov 2009 12:56

Re: Problem mit IdFTP1.Put
 
Hi Oliver,

Zitat:

Zitat von Sir Rufo
Zitat:

Zitat von Assertor
Nur soviel, bevor ein anderer das liest und wieder denkt "wußte ich es doch, Indy 10 hat Probleme": Nein, der FTP Transfer ist wirklich die Pflicht für Indy - also eine Aufgabe die regelmäßig genutzt und kontrolliert wird.

Gruß Assertor

aha ... also nehmen wir jetzt mal Indy10 (v10.5.5 so wie bei Delphi 2010 dabei)
holen uns die Demo FTP-Client aus dem SVN
compilieren und schon geht das.

Ich weiß nicht, was das aha soll - aber die Demos sind nicht aktuell, das ist auch kein Geheimnis. Im SVN Log sieht man das, irgendwann 2005 von Jörg Meier reingestellt und 2008 von Olaf Monien verschoben (als er noch dabei war).

In D2009 und D2010 steht das ja z.B. auch im Demo-Ordner "Indy v9 Demos" - und nichts ist enthalten, trotzdem kommen die wenigsten auf die Idee irgendwas von Indy 9 mit D2009+ auszuprobieren. Aber egal wie oft man es Embarcadero sagt, das lustige Textfile bleibt drin ;)

Den Rest deines Posts verstehe ich nicht, zu viel Ironie ohne den :mrgreen: Smiley. Aber wenn Du eine konkrete Frage hast: Immer her damit. Ein einfachen FTP Connect und das List Kommando bringen wir Dir auch noch bei :mrgreen: (< da ist er)

Edit: Gerade mal den FTPClient aus dem Demos getestet. Mein Debugger bringt mir sofort Fehlermeldungen, das Properties nicht (mehr) exisitieren - selbst mit D2009. Sollte also klar sein, daß dies nicht ohne Änderungen funktionieren kann.

Und: Die D2010 Version ist nicht automatisch die Version aus dem SVN. Embarcadero nimmt eigene Anpassungen vor, leider ohne immer darüber zu benachrichtigen. Auch welche Build-Nummer aus dem SVN genommen wurde, wird nicht immer mitgeteilt. Das wird sich hoffentlich in Zukunft (weiter) bessern.

Gruß Assertor

Sir Rufo 3. Nov 2009 13:12

Re: Problem mit IdFTP1.Put
 
Liste der Anhänge anzeigen (Anzahl: 1)
sorry, für wegen die fehlenden :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Der ftp-Server den ich ansprechen will ist erreichbar, mit den Login-Daten beschreibbar, also eigentlich voll erreichbar.

Der Login funktioniert, der Upload startet und dann kommt die Fehlermeldung "Connection closed; transfer aborted"

Wie schon gesagt: Delphi 2010, Indy 10.5.5 (die wo direkt mit Delphi 2010 geliefert werden :mrgreen: )

Hier der Code aus dem Formular, der Rest vom Projekt ist im Anhang.

Delphi-Quellcode:
unit frmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdExplicitTLSClientServerBase, IdFTP, ExtCtrls;

type
  TForm1 = class( TForm )
    Host : TEdit;
    Port : TEdit;
    Username : TEdit;
    Password : TEdit;
    Passive : TCheckBox;
    Button1 : TButton;
    IdFTP1 : TIdFTP;
    procedure Button1Click( Sender : TObject );

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1 : TForm1;

implementation

{$R *.dfm}

uses
  idFtpCommon;

procedure TForm1.Button1Click( Sender : TObject );
  begin
    // Einstellungen lesen
    IdFTP1.Host := Host.Text;
    IdFTP1.Port := StrToIntDef( Port.Text, 21 );
    IdFTP1.Username := Username.Text;
    IdFTP1.Password := Password.Text;
    IdFTP1.Passive := Passive.Checked;
    IdFTP1.AutoLogin := False;

    IdFTP1.Connect;
    try
      IdFTP1.Login;
      IdFTP1.TransferType := ftBinary;
      if FileExists( '.\Dokument.txt' ) then
        IdFTP1.Put( '.\Dokument.txt', 'Dokument.txt', False );
    finally
      IdFTP1.Disconnect;
    end;

  end;

end.

Assertor 3. Nov 2009 13:18

Re: Problem mit IdFTP1.Put
 
Hi,

Zitat:

Zitat von Sir Rufo
sorry, für wegen die fehlenden :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

[...]

Wie schon gesagt: Delphi 2010, Indy 10.5.5 (die wo direkt mit Delphi 2010 geliefert werden :mrgreen: )

Ok ;)

Ich sehe mir Dein Demo jetzt sofort an und gebe gleich Feedback.

Aber was ist das für eine Demo?
Zitat:

Zitat von Sir Rufo
aha ... also nehmen wir jetzt mal Indy10 (v10.5.5 so wie bei Delphi 2010 dabei)
holen uns die Demo FTP-Client aus dem SVN
compilieren und schon geht das.

Tatsache, da tut sich was ...

Wie hast Du das bitte ohne Änderungen kompiliert? Die Indy10Demo vom SVN läuft zu 100% nicht ungeändert mit Delphi 2009 und 2010 - da sind zu viele geänderte Properties und Methodenparameter.

Hast Du D2010+ mit dem Pre-:glaskugel:-Compiler? ;)

Edit: Feedback. Deine (eigene) Demo mit aktuellen SVN kompiliert - und ich bekomme keine Fehlermeldung (und hab von sowas auch noch nicht gehört). Halt mich auf dem Laufenden :)

Gruß Assertor

Sir Rufo 3. Nov 2009 19:54

Re: Problem mit IdFTP1.Put
 
Ok, jetzt habe ich ftp mit Passive laufen ...

... jetzt funktioniert es ... aber ...

... nur wenn der ftp-server auf Port 21 sitzt. :wall:

Ich habe die ganze Zeit mit einem ftp-server auf einem anderen Port (22222) getestet.
Jetzt tut das sogar mit den Delphi-Beipack-Indys.

Seltsam ist es schon ... aber soweit klappert es ja jetzt, dann eben nur Standard :mrgreen:

cu

Oliver

SirThornberry 3. Nov 2009 20:00

Re: Problem mit IdFTP1.Put
 
warum speicherst du die Daten erst auf der Festplatte anstelle sie direkt hoch zu laden? Werden diese lokal auf der Festplatte wirklich benötigt?

Sir Rufo 3. Nov 2009 20:02

Re: Problem mit IdFTP1.Put
 
Zitat:

Zitat von SirThornberry
warum speicherst du die Daten erst auf der Festplatte anstelle sie direkt hoch zu laden? Werden diese lokal auf der Festplatte wirklich benötigt?

Das war eigentlich mein geringstes Problem :mrgreen:

Das Projekt oben war doch nur ein Test-Projekt ... die richtige Anwendung wird das aus einem Stream pumpen ;)

cu

Oliver

Assertor 13. Nov 2009 13:34

Re: Problem mit IdFTP1.Put
 
Hi,

Zitat:

Zitat von Sir Rufo
Ok, jetzt habe ich ftp mit Passive laufen ...

... jetzt funktioniert es ... aber ...

... nur wenn der ftp-server auf Port 21 sitzt. :wall:

Ich habe die ganze Zeit mit einem ftp-server auf einem anderen Port (22222) getestet.
Jetzt tut das sogar mit den Delphi-Beipack-Indys.

Seltsam ist es schon ... aber soweit klappert es ja jetzt, dann eben nur Standard :mrgreen:

So, Sir Rufo und ich haben das gerade mal debuggt. Ergebnis bisher: Es geht sehr wohl auch auf 22222 (getestet mir FileZilla Server und verschiedenen Indy Versionen), nur leider sendet Sir Rufos MS IIS FTP Server aus irgendeinem nicht ersichtlichen Grund Indy & anderen Clients die interne IP des Servers im Passiv-Modus. Da scheint es ein Problem mit dem FTP Server von MS und / oder Sir Rufo's Router zu geben.

Selbst wenn jetzt die externe IP genommen wird, schlägt auf seiner Seite die NAT fehl und die Ports werden nicht geöffnet... Für das Problem selbst finden sich viele Einträge zu MS IIS FTP und dem Router, aber kein einziger Report bisher zu Indy.

Ergo: Nicht alles, was nicht geht, liegt an Indy :mrgreen:

Gruß Assertor

Tags: Indy, 500, Illegal Port Command, NAT, Router, FTP


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz