Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   FTP Uploadproblem bei großen Dateien (https://www.delphipraxis.net/146517-ftp-uploadproblem-bei-grossen-dateien.html)

Mondengel 21. Jan 2010 14:54


FTP Uploadproblem bei großen Dateien
 
Hallo Leute,
ich hätt da mal ein Problem.

Ich hab mir einen kleinen FTP-Client gebastelt. Das Problem ist nur, dass bei größeren Datein der Client nicht überträgt.
Hab schon im Internet fleißig gesucht find aber nichts, was ansatzweise meinem Problem gleich kommt oder ich bin einfach zu blöd dafür :wall:.

Naja ich hab auch schon mir die OnWorkBeginn und OnWork angesehen. Das erstaunliche ist : wenn z.B. AWorkCountMax = 145.937.081 im OnWorkBeginn ist, überschreitet irgendwann im OnWork das WorkCount diesen Wert. Später wird sogar WorkCount negativ. :shock:

Ich hab echt keine Ahnung mehr was ich mache soll oder prüfen kann.

thx im vorraus. :coder:

Die Muhkuh 21. Jan 2010 14:55

Re: FTP Uploadproblem bei großen Dateien
 
Welche Indy-Version?

Mondengel 21. Jan 2010 14:59

Re: FTP Uploadproblem bei großen Dateien
 
Das ist Indy10

Mondengel 22. Jan 2010 07:08

Re: FTP Uploadproblem bei großen Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich geb mal mein Code her. Wenn jemand drüberschaun könnt und mir Verbesserungsvorschläge gibt bin ich dankbar -.-

Die Muhkuh 22. Jan 2010 07:38

Re: FTP Uploadproblem bei großen Dateien
 
Hi,

leider kann ich das Programm nicht kompilieren, da mir einige Komponenten fehlen (Jedis, LMD, Abrevia).

Dennoch sind mir ein paar Sachen aufgefallen, die zwar das Problem nicht beheben, aber dem Code gutes tun:

Unit "MyFTPClient"
  • Da ist die globale Variable "FTPClient", oben drüber ist ne Klasse TMFTP, da sollte der FTPClient als privates Feld rein.
  • Warum leitest Du TMFTP von TForm ab? Brauchst Du doch gar nicht
  • Methoden MPut: Einmal mit TStream und einmal mit FileName, der Code der Methoden ist fast identisch. Das könnte man drastisch reduzieren, wenn Du in der Methode MPut, die einen FileName als Source entgegen nimmt, einfach einen Stream auf die gegebene Datei öffnest und dann die andere MPut-Methode, die einen Stream als Source entgegen nimmt, aufrufst, dadurch sparst Du Dir etwas Code und es gibt nur eine Stelle, an der der Dateitransfer abläuft.
  • Manche Methoden sind in Englisch, manche in Deutsch, das kann sehr verwirrend sein: Warum bleibst Du nicht bei einer Sprache?
  • Du greifst von TMFTP (z.B. bei MConnection) direkt auf die Mainform zu, das ist nicht gut, dadurch bist Du immer abhängig davon: Übergebe die benötigten Daten als Parameter
  • Wenn ich nicht ganz falsch liege, baust Du bei jeder Dateiübertragung (MPut) eine Verbindung auf und beendest sie wieder? Warum? Verbinde dich einmal, schiebe alle Dateien hoch und baue die Verbindung erst dann wieder ab, wenn entweder das Programm beendet wird, oder der Benutzer explizit auf einen "Disconnect" Knopf drückt. Das spart auch Übertragungszeit.

Das fiel mir beim ersten Drüberschauen auf.

Zum eigentlichen Problem werde ich mir gleich selbst mal eine kleine Anwendung schreiben, um zu überprüfen, ob es ein Problem in Deiner Anwendung ist, oder ob es generell ein Problem mit den Indy-Dateien ist.

Ab welcher Größe ungefähr funktioniert der Upload nicht mehr?

Mondengel 22. Jan 2010 08:28

Re: FTP Uploadproblem bei großen Dateien
 
Zitat:

Warum leitest Du TMFTP von TForm ab? Brauchst Du doch gar nicht
Ist zwar eine schlechte Ausrede, aber ich war noch Anfänger als das zum erstenmal programmiert wurd :oops:

Zitat:

Wenn ich nicht ganz falsch liege, baust Du bei jeder Dateiübertragung (MPut) eine Verbindung auf und beendest sie wieder? Warum? Verbinde dich einmal, schiebe alle Dateien hoch und baue die Verbindung erst dann wieder ab, wenn entweder das Programm beendet wird, oder der Benutzer explizit auf einen "Disconnect" Knopf drückt. Das spart auch Übertragungszeit.
Das war von meinemVorgesetzen so gewünscht.

Ich hab mal geschaut wo die Probleme Anfangen. So ab 12 KB kommen kommische Werte und meine Processbar hängt.

Die Muhkuh 22. Jan 2010 08:30

Re: FTP Uploadproblem bei großen Dateien
 
Hi,

also ich uploade hier gerade mit TIdFTP seit ca. 18 Minuten hoch und haben schon knapp 130mb übertragen.

die Progressbar zeigt auch ordentlich an.

Habe eig. nur ein TIdFTP auf die Form gemacht, die Daten zu meinem FTP-Account eingetragen.

Der ganze Code ist nur das hier:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  FTP.Connect;
  FTP.ChangeDir('raubi.eu');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if (openDialog1.execute) then
  begin
    FTP.Put(openDialog1.FileName, ExtractFileName(openDialog1.FileName), false);
  end;
end;

procedure TForm1.FTPWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  progressbar1.Position := AWorkCount;
  progressbar1.Repaint;
end;

procedure TForm1.FTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
  progressbar1.Max := AWorkCountMax;
end;

Mondengel 22. Jan 2010 08:40

Re: FTP Uploadproblem bei großen Dateien
 
Ich glaub ich seh den Fehler werd aber noch mal testen.

Bei deinen aufrufen von OnWork und OnWorkbeginn steht
Zitat:

Delphi-Quellcode:
procedure TForm1.FTPWork(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);

Zitat:

Delphi-Quellcode:
procedure TForm1.FTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
  progressbar1.Max := AWorkCountMax;
end;

Bei mir wiederum

Delphi-Quellcode:
procedure TMFTP.Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
Delphi-Quellcode:
procedure TMFTP.WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
Ich hab ein Integer und du ein Int64. Das könnt das Problem mit fer Processbar lösen.

Die Muhkuh 22. Jan 2010 08:48

Re: FTP Uploadproblem bei großen Dateien
 
Das sollte kein Problem.

In ein Integer passt noch 2147483647 rein, da bist Du mit 145937081 noch weit drunter. Das Problem muss also irgendwo anders liegen.

Nochmals zur Indy-Version, welche ist das genau? Ich hab es mit 10.2.5 getestet.

Die Version bekommst Du raus, wenn Du einfach fix nen neues Projekt erstellst, dort eine Indy-Komponente auf die Form legst und auf selbige rechts klickst.

Die Muhkuh 22. Jan 2010 08:50

Re: FTP Uploadproblem bei großen Dateien
 
Zitat:

Zitat von Mondengel
Zitat:

Warum leitest Du TMFTP von TForm ab? Brauchst Du doch gar nicht
Ist zwar eine schlechte Ausrede, aber ich war noch Anfänger als das zum erstenmal programmiert wurd :oops:

Das heißt aber nicht, dass man es nicht ändern kann :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.
Seite 1 von 2  1 2      

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