![]() |
Datei per FTP hochladen
Hey,
ich sollte einen neuen Thread erstellen, also hier mein Anliegen: Ich habe EditFelder und nach Betätigen des Buttons werden die Inhalte dieser Felder in einer Textadtei gespeichert, doch wie bekomm ich diese nun auf einen FTP Server? Ich habe gerade einiges über idFTP gelesen, doch ich verstehe nicht wie ich es benutzen soll. Hab es mir gerade heruntergeladen - naja ich verstehs nicht so ganz. Ich habe bereits einen FTP und möchte die .txt nun darauf hochladen, wie bekomme ich das mit idFTP hin, wie installiere ich es? Oder gibt es auch noch andere Methoden? danke nochmals für eure Hilfe! :) Edit: Tut mir Leid, ich habs in der falschen Rubrik erstellt :/ |
Re: Datei per FTP hochladen
Was für eine Delphi-Version hast du denn? Normalerweise sind da die Indy-Komponenten schon an Board und da ist eine solche FTP-Komponente enthalten. Würde mich auch wundern, wenn hier im Forum nichts darüber zu finden wäre, wie man diese nutzt :zwinker:
|
Re: Datei per FTP hochladen
Ich habe Delphi 2010, ich glabue da ist sie bereits schon da, also ich hab TidFTP bereits gefunden, doch weiter weiß ich leider nich =(
|
Re: Datei per FTP hochladen
Wenn man nach "IdFTP" und "hochladen" sucht, stößt man beispielsweise auf diesen Thread:
![]() |
Re: Datei per FTP hochladen
Stell mal etwas präzisere Fragen, dann kann dir auch besser geholfen werden.
Was mir dies bzgl einfällt: zieh die Komponente auf deine Form und stelle in den Eigenschaften die IP-Adresse deines FTP-Servers ein (in so fern dieser eine feste hat). Du kannst auch ein Edit auf die Form klatschen, in der der User die Adresse (darf natürlich auch eine Domain sein) eingeben darf. Dann musst du halt zur Laufzeit sowas wie IdFTP1.Server := Server machen. Ich würde behaupten, dass der Port eigentlich passt, da bei FTP Port 21 Standard ist und seltenst ein anderer genutzt wird. Eine Verbindung wirst du mit Connect aufbauen und folglich mit Disconnect wieder schließen können. Btw: Hast du wirklich die Suche bemüht? :gruebel: Hab auf Anhieb ![]() |
Re: Datei per FTP hochladen
Tausend Dank!! :)
Also ich dachte an Funpic oder auch ohost, da diese ja kostenlos Webspace zur Verfügung stellen und ein FTP Zugang somit auch vorhanden ist. Ich werd mir gleich noch diesen Thread reinziehen und hoffe auch, dass es anschließend klappt, danke nochmals für die Hilfe, aber auch Geduld mit mir :P mfg |
Re: Datei per FTP hochladen
Also ich habs grad versucht umzusetzen, beim Compilieren treten keine Probleme auf, doch wenn ich es Testen will, kommt folgende Meldung:
"Project Project1.exe raised exception class EClassNotFound with message "Class TidFTP not found"." Also ich muss die Class oben noch deklarieren oder wie soll ich das verstehen? |
Re: Datei per FTP hochladen
Füg einmal IdFtp der uses-Klausel hinzu.
|
Re: Datei per FTP hochladen
Ist da bereits vorhanden, hier mein kompletter Quelltext:
Delphi-Quellcode:
nit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFtp, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } ftp: TidFtp; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin with ftp do begin try Host := '......funpic.de'; Username := 'benutzername'; Password := 'pw'; Passive := true; Connect; Put('C:\text.txt', 'text.txt', false); Disconnect; finally ftp.Free; end; end; end; end. |
Re: Datei per FTP hochladen
ftp wird ja nirgends erzeugt, dafür aber freigegeben.
|
Re: Datei per FTP hochladen
Was soll mit dem Quelltext sein? Kommt ein Fehler? Ist das die fertige Lösung, die funktioniert?
|
Re: Datei per FTP hochladen
Zitat:
habs grad mit TidFTP.Create probiert nach Begin klappt aber auch nicht, kommt die gleiche Fehlermeldung. |
Re: Datei per FTP hochladen
Jetzt geht mir ein Licht auf: Du hast eine IdFTP-Komponente aufs Formular gezogen und dann die Deklaration nach private verschoben, richtig? Mach das mal wieder rückgängig.
|
Re: Datei per FTP hochladen
Soll ich sie ganz rausnehmen oder wohin soll ich sie verschieben?
|
Re: Datei per FTP hochladen
Also hast Du die Komponente auf dem Formular? Dann so:
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; ftp: TidFtp; //hierhin procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public declarations } end; |
Re: Datei per FTP hochladen
So oke an sich ist das Problem jetzt zwar behoben, doch nun kommt eine Meldung:
"Field.Form1.ftp does not have a corresponding component.Remove the declaration?" Heißt es, dass der FTP nicht geht? |
Re: Datei per FTP hochladen
Wenn das eben gepostete der gesamte Quelltext war scheint es mir das Einfachste, Du fängst von vorn an: neues Formular, da eine TIdFTP und Deinen Button drauf, Eigenschaften im OI einstellen und im ButtonClick das Put aufrufen.
|
Re: Datei per FTP hochladen
Ja wahrscheinlich schon^^
Aber hier nochmal mein kompletter Quelltext, vllt habe ich ja auch die falsche FTP Adresse eingegeben, was ich aber nicht glaube naja, solange ich von vorne anfange hier nochma das Ganze:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdFtp, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase; type TForm1 = class(TForm) Button1: TButton; ftp: TidFTP; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin with ftp do begin try Host := ' ftp://kidgudi.ki.funpic.de/'; Username := 'kidgudi'; Password := '*****'; Passive := true; Connect; Put('C:\text.txt', 'text.txt', false); Disconnect; finally ftp.Free; end; end; end; end. |
Re: Datei per FTP hochladen
Mahlzeit,
den Host bitte ohne "FTP://" Das "FTP://" benötigt nur ein Webbrowser damit er weiß das er nun mit einem FTP Server spricht. Grüße Klaus |
Re: Datei per FTP hochladen
Es funktioniert, vielen Dank. Du hast mir wirklich sehr geholfen, danke nochmals!!! :cheer: :cheer:
|
Re: Datei per FTP hochladen
Und lass das Free weg, sonst knallt es ganz gehörig beim nächsten Klick auf den Button oder beim Programmende.
|
Re: Datei per FTP hochladen
Hm, da erscheint wieder dieser Fehler:
"Field.Form1.ftp does not have a corresponding component.Remove the declaration?" Ich hab alles nochmal von vorne aufgesetzt, aber leider kein Erfolg. Ich habe lediglich 2 EditFelder hinzugefügt und ein TString eingebaut. Also hier nochmal mein neuer Quelltext, beide Programme funktionierten unabhängig voneinander zwar, aber wenn man sie zusammen benutzt, leider nicht:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFTP, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; ftp: TidFTP; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var sl:TStrings; begin sl:=TStringList.Create; sl.Add(Edit1.text); sl.Add(Edit2.text); sl.SaveToFile('C:\text.txt'); sl.Free; with ftp do begin try Host :='kidgudi.ki.funpic.de'; Username := 'kidgudi'; Password := '*****'; Passive := true; Connect; Put('C:\text.txt', 'text.txt', true); Disconnect; finally end; end; end; end. |
Re: Datei per FTP hochladen
Häng doch bitte mal die *.pas und die *.dfm an.
|
Re: Datei per FTP hochladen
![]() Hier ist mein kompletter Ordner mit dem Projekt darin. Ich hoffe ihr könnt mir helfen, ich verzweifle langsam^^ |
Re: Datei per FTP hochladen
Zitat:
Wenn du den Namen der Komponente im Quelltext änderst, dann darfst du dich auch nicht wundern! Du hast IdFtp1 umbenannt in ftp ... Mach das über den Objekt-Inspektor ... dann kriegen auch alle mit, dass der Name geändert werden soll |
Re: Datei per FTP hochladen
In der *.dfm heißt die Komponente IdFTP1 und in der *.pas ftp. Wenn Du Komponenten umbenennst, dann mach das immer über den Objektinspektor. Übrigens: Du kannst auch direkt hier in der DP Dateien an Deinen Beitrag anhängen.
|
Re: Datei per FTP hochladen
Es funktioniert top, vielen vielen Dank. Ihr habt mir echt geholfen, vor allem du DeddyH dir einen ganz großen Dank, es läuft einwandfrei. Merci ;)
lg |
Re: Datei per FTP hochladen
Hey, ich bins wieder :pale:
Wie gesagt, funktioniert es bei mir einwandfrei. Doch ich glaube das bezieht sich nur auf Local oder? Ich habs meinem Freund geschickt, er sollte was in die Edit Felder eintippen, doch anschließend kam: "cannot create file "C:\test.txt". Zugriff verweigert." Ich glaube das Programm hat keine Rechte eine Textdatei auf einem anderen System zu erstellen, oder sehe ich das falsch? Doch wie kann man dieses Problem umgehen? Gibt es da eine andere Alternative? mfg |
Re: Datei per FTP hochladen
Zitat:
Woher weißt du ob es den Pfad "C:\" auf dem Zielsystem gibt? (Ich bin nicht gezwungen mein System auf C: zu installieren!) Woher weißt du ob du in dem Pfad "C:\" Schreibrechte hast? Es gibt dafür eine "Styleguide" von Microsoft "Where to put the fu**ing data-files" Schaue nach ![]() ![]() ![]() |
Re: Datei per FTP hochladen
Ja genau, das hab ich mir auch gedacht, wie kann ich herausfinden, WO genau ich denn Schreibrechte habe und wo nicht?
Also dieser Befehl schafft Abhilfe? Edit: Ich hab grad einiges über Special Folders gelesen und das scheint ja eine richtig komplizierte Sache zu werden. Gibts denn nichts anderes? Also gibts keinen Platz auf dem es im Normalfall Schreibrecht gibt? lg |
Re: Datei per FTP hochladen
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Du bekommst nur die Pfadangaben geliefert. Bei einigen Pfaden kann man aber davon ausgehen, dass der aktuelle Benutzer dort Schreibrechte haben sollte, sonst könnte der nämlich nicht vernünftig arbeiten :mrgreen: Kompliziert ist das nicht wirklich ... dafür gibt es fertige Units womit man das auslesen kann. Die Jedi's haben da einiges im Programm. Ich habe dir mal eine Unit angehängt, die diese Special Folders mit einfachen Befehlen erschlägt :mrgreen: Zudem ist in der Unit auch eine Funktion, die dir die Rechte in dem Verzeichnis oder an einer Datei zurückliefert. Eine Demo ist auch dabei, da werden alle Special Folders aufgelistet inkl. der Rechte. |
Re: Datei per FTP hochladen
Vielen Dank dafür erstma, doch wie genau binde ich das nun in meinen Quelltext ein?
Also was genau muss ich denn jetzt machen? Habs jetzt soweit verstanden, dass SpecialFolders mir die Ordner anzeigt, die Schreibrecht haben usw. Doch was nun? Wie genau bau ich das nun ein? |
Re: Datei per FTP hochladen
z.B. so (ich habe mal die schönen Eigenheiten der Unit hier benutzt :mrgreen: )
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFTP, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; IdFTP1: TidFTP; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses // Unit einbinden uSpecialFolders; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var sl:TStrings; begin // Temporäres Verzeichnis für diese App erstellen if ForceDirectories( ResolveSFVars( '{appdatatemp}' ) ) then begin sl := TStringList.Create; try sl.Add(Edit1.text); sl.Add(Edit2.text); sl.SaveToFile( ResolveSFVars( '{appdatatemp}\text.txt' ) ); finally sl.Free; end; with IdFTP1 do begin Host :='kidgudi.ki.funpic.de'; Username := 'kidgudi'; Password := '*****'; Passive := true; Connect; Put( ResolveSFVars( '{appdatatemp}\text.txt' ), 'text.txt', true); Disconnect; end; // Temporäres Verzeichnis aufräumen und löschen DeleteAndEmptyDir( '{appdatatemp}' ); end else ShowMessage( 'Temporäres Verzeichnis konnte nicht erstellt werden!' ); end; end. |
Re: Datei per FTP hochladen
Oke um die Unit uSpecialFolders einzubinden, muss sie sich im gleichen Ordner befinden, wie die normale Unit1 auch? Oder ist das egal?
Also habs soweit miteinbezogen, doch nun kommt die Fehlermeldung: Exception class EIdReplyRFCError with message 'text.txt: Append/Restart not permitted, try again'. Was nun? =( Update: Fehlermeldung scheint weg zu sein, funktioniert alles einwandfrei. Danke ;) |
Re: Datei per FTP hochladen
Hallo
Ich versuche mit der TIdFTP-Komponente via Put einige größere Dateien hochzuladen. Das heißt ich führe den Connect durch und rufe anschließend in einer Schleife mehrmals hintereinander Put auf. Leider kommt es dann immer mal wieder vor, dass die Verbindung unterbrochen wird. Bei der Protokollierung über das OnStatus-Ereignis erhalte ich dann als Meldungstext "Disconnected". Wie geht man in so einem Fall am besten vor ? Kann man einfach erneut Connect aufrufen (innerhalb der OnStatus-Behandlung) ? Oder wie macht ihr das ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 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