Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi FTP Client (https://www.delphipraxis.net/51263-ftp-client.html)

Brueckenhauer 9. Aug 2005 12:59


FTP Client
 
Ich habe folgendes vor:

Ich möchte ein kleines tool schreiben, wo man sich auf einen server einloggt und man automatisch in ein von mir vorgebenes Verzeichnis gelangt, dort sollte man dann nur einen Ordner anlegen können und in diesen Ordner wechseln können sowie dann Bilder hochladen können, am besten indem man die makierten Bilder vom Desktop in das Programm zieht. Leider hab ich keine idee wie ich das anfangen kann. Vielleicht kann mir da einer ja mal tipps geben oder vielleicht gibt es sowas ja schon.

marabu 10. Aug 2005 21:15

Re: FTP Client
 
Hi

Zitat:

Zitat von Brueckenhauer
Leider hab ich keine idee wie ich das anfangen kann.

Ich schlage vor, dass du dein Projekt zuerst in Teilprojekte zerlegst. Bei der Kommunikationstechnik hast du dich ja schon in Richtung FTP bewegt - laut Titel. Der Indy FTP-Client sollte dich vor keine größeren Probleme stellen und Hilfe hier im Forum ist dir so gut wie sicher.

Das Anlegen genau eines Verzeichnisses und das automatische Anmelden sind eher ein Sicherheitsproblem auf dem Server als ein Programmierproblem auf der Client-Seite. Wie soll sich der Benutzer deines Programmes anmelden? Anonym mit Schreibrechten? Oder soll er sich selbst einen user account erzeugen, damit sein Verzeichnis geschützt ist?

Wenn du es selbst programmieren willst, dann wirst du dich auch mit Drag&Drop von shell objects befassen müssen. Wenn nicht, so bin ich sicher, dass es (freie) Software zum Aufbau eines Fotoalbums im Web gibt. Hast du schon mal bei SourceForge danach recherchiert?

Grüße vom marabu

Brueckenhauer 10. Aug 2005 21:43

Re: FTP Client
 
erstmal vielen Dank für deine antwort...habe inzwischen angefangen und habe eine Verbindung und ausgabe mit dem Indy FTP erstellen können. Nun habe ich aber noch eine Frage zu
IdFTP1.List(DirectoryListBox.Items);

ist es möglich diese Liste zu zerlegen? Also das Datum, der Name usw...

marabu 11. Aug 2005 07:01

Re: FTP Client
 
Klar doch.

Delphi-Quellcode:
procedure TDemoForm.ListButtonClick(Sender: TObject);
var
  l: TIdFtpListItems;
  i: integer;
  sl: TStringList;
begin
  sl := TStringList.Create;          // create raw data container
  idFTP.Connect(true, -1);           // login
  idFTP.List(sl, '*', true);         // get all entries with details
  l := idFTP.DirectoryListing;       // get ref of parsed entries
  for i := l.Count - 1 downto 0 do   // start on safe side
    if l[i].ItemType = ditDirectory  // check for sub directories
      then sl[i] := l[i].FileName    // keep dir entries
      else sl.Delete(i);             // drop other entries
  idFTP.Disconnect;                  // logout
  // ListBox.Items.Assign(sl);          // show directory names
  sl.Free;                           // drop raw data container
end;
marabu

PS: Indy 9

Brueckenhauer 11. Aug 2005 09:12

Re: FTP Client
 
vielen Dank werde ich testen, habe inzwischen noch eine andere Frage und zwar:

Ich habe eine Drag & Drop funktion eingebaut und wenn ich nun 1 Bild oder auch mehrere auf das Programm ziehe lädt das Programm die Bilder zwar hoch, aber das Programm reagiert in der Zeit nicht, wie kann ich das ändern?

Delphi-Quellcode:
procedure TForm1.WMDROPFILES (var Msg: TMessage);
var i, anzahl, size: integer;
    Dateiname: PChar;
begin
inherited;
anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255);
for i := 0 to (anzahl - 1) do
begin
  size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
  Dateiname:= StrAlloc(size);
  DragQueryFile(Msg.WParam,i , Dateiname, size);
  IdFTP1.Put(Dateiname,
  ExtractFileName(Dateiname));
  ListBox1.items.add(StrPas(Dateiname));
  StrDispose(Dateiname);
end;
DragFinish(Msg.WParam);
end;

ste_ett 11. Aug 2005 09:21

Re: FTP Client
 
Mit
Delphi-Quellcode:
Application.ProcessMessages
werden die anderen Prozesse ausgeführt, bevor dein Programm weitermacht.

Alternativ könntest du für das Hochladen auch einen eigenen Thread verwenden. :)

Brueckenhauer 11. Aug 2005 09:44

Re: FTP Client
 
vielen Dank, wie erstelle ich einen eigenen Thread? Hab sowas leider noch nicht gemacht.

ste_ett 11. Aug 2005 10:38

Re: FTP Client
 
Als erstes musst du eine neue Klasse erzeugen, die du von TThread ableitest.
Delphi-Quellcode:
type
  TFTPThread= class(TThread)
  public
    procedure Execute; override;
  end;
Delphi-Quellcode:
procedure TFTPThread.Execute;
begin
// Befehle für den Thread
// z. B. das Hochladen der Datei
end;
Im Deklarierungsteil musst du den Thread anlegen.
Delphi-Quellcode:
var
  FTPThread: TFTPThread;
Dann im Event den Thread starten.
Delphi-Quellcode:
  FTPThread := TFTPThread.Create(true);
  FTPThread.Resume;
// Durch das Resume wird der Thread gestartet
// Alternativ ein false als Parameter nehmen,
// dann wird der Thread sofort gestartet und das "Resume" wird nicht gebraucht
  FTPThread.Destroy; // Destructor aufrufen

Das war's mal ganz kurz. :)

Kompon Ente 11. Aug 2005 10:44

Re: FTP Client
 
Zitat:

Zitat von Brueckenhauer
vielen Dank, wie erstelle ich einen eigenen Thread? Hab sowas leider noch nicht gemacht.

lol? Ja nee ist klar...was ist denn das hier dann? :shock:

Edit: Ups, sry, geht ja um was ganz anderes.. :roll: ..hab wieder mal nicht alles gelesen :wall:

Brueckenhauer 11. Aug 2005 17:06

Re: FTP Client
 
vielen Dank dafür.
Aber ich habe
Delphi-Quellcode:
  FTPThread := TFTPThread.Create(true);
  FTPThread.Resume;
  // Durch das Resume wird der Thread gestartet
  // Alternativ ein false als Parameter nehmen,
  // dann wird der Thread sofort gestartet und das "Resume" wird nicht gebraucht
  FTPThread.Destroy; // Destructor aufrufen
auf einen Button gelegt und wenn ich den drücke bekomme ich zum testen nichtmal eine showmessage ausgegeben. Ist da noch was falsch?

ste_ett 11. Aug 2005 19:45

Re: FTP Client
 
Was hast du denn in die Execute-Procedure geschrieben?

Brueckenhauer 11. Aug 2005 19:55

Re: FTP Client
 
ja wie gesagt, zum testen erstmal eine showmessage('test'); Welche aber nicht angezeigt wird.

sECuRE 11. Aug 2005 21:09

Re: FTP Client
 
Hi,

ich glaube, du kannst ShowMessage() nicht in Threads benutzen. Probier's doch mit etwas anderem, zum Beispiel der Form.caption...

cu

madtom 11. Aug 2005 21:27

Re: FTP Client
 
Hi,

für den Anfang schlage ich dir vor, die bei Indy mitgelieferten Demos durchzusehen,
speziell die für einen FTP-Up- bzw. -Download. Das wird Dir viele Fragen schon
beantworten. Die Sache hat allerdings noch einen anderen Haken: Die Demos verwenden
die quasi fest eingebauten FTP-Daten wie z.B. auch Dein FTP-Passwort. Es gibt aber
Sniffer, die den FTP-Verkehr mitschreiben können und so auch an Deine Daten kommen.
Eine Lösung wäre, anonymes FTP zu benutzen.

PS: Ich hatte vor 2 Jahren ein ähnliches Problem wie Du. Zielstellung war es, Bilddaten
von Kunden mittels eines möglichst einfachen Programms auf den Server meines Arbeitgebers
zu bekommen. (sogenannter Internet Print Service)

Brueckenhauer 14. Aug 2005 12:16

Re: FTP Client
 
Vielen Dank, eine Frage hab ich noch, wenn ich 120sekunden nix mache wird die verbindung geschlossen wie kann man das ändern?

Brueckenhauer 14. Aug 2005 16:54

Re: FTP Client
 
Eine Frage noch:
Ich habe eine Listbox wo ich eine oder mehrere Dateien einziehe...den up- download speed kann ich auch bestimmen, aber wie kann ich die Zeit für die gesamten dateien bestimmen, also bei 5 Dateien dauert es noch 5 minuten, die zeit müsste sich dann runterzählen. Wie kann man das anstellen, weil die zeit für eine datei * 5 geht irgendwie nicht, der zeigt zum ende der ersten datei dann auch wieder 0sec. an und fängt bei der 2ten Datei dann wieder von vorn an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.

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