[Problem] WinInet - Upload auf einen FTP Server

Alle Fragen zur Netzwerkkommunikation
Antworten
GreyFox23
Beiträge: 2
Registriert: Do 16. Apr 2015, 22:45

[Problem] WinInet - Upload auf einen FTP Server

Beitrag von GreyFox23 »

Schönen guten Abend,

ich bin neu hier im Forum, sowie relativ unerfahren (nur im Schulunterricht benutzt) mit Lazarus.
Dennoch habe ich mich nach ein paar Projekten daran versucht ein Programm zu schreiben, das mithilfe der WinInet-API eine Datei auf einen FTP-Server läd.

Hier der Quelltext:

Code: Alles auswählen

function putfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var
  hopen, hconnect: HINTERNET;
begin
  hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
  Result := FtpPutFile(hconnect, pchar(localfile), pchar(remotefile), FTP_TRANSFER_TYPE_UNKNOWN, 0);
  InternetCloseHandle(hconnect);
end;
 
 
procedure TFTP2Form.UploadButtonClick(Sender: TObject);
var
     fusername, fpassword, fserver, flocalfile, fremotefile: string;
begin
     fusername:=UserEdit.Text;
     fpassword:=PasswordEdit.Text;
     fserver:=ServerEdit.Text;
     fremotefile:=DateiFTPEdit.Text;
     flocalfile:=DateiPCEdit.Text;
 
 
     putfile( fserver, fusername , fpassword , flocalfile , fremotefile );
 
end;   


Bei der Funktion habe ich mir Hilfe geholt und "putfile()" in der Prozedur funktioniert auch einwandfrei.
Nun aber mein Problem: Es funktionert nur, wenn ich anstatt von Variablen, die ich zuvor mit den Editfeldern fülle, die Parameter direkt im Quelltext bestimme.

Bsp.:

Code: Alles auswählen

putfile( '123.456.789', 'benutzer', 'passwort','C:\test.txt','/files/test.txt')


Wenn ich es mit den Variablen machen möchte, wird es gar nicht erst hochgeladen.

Weiß jemand was ich falsch gemacht habe?

MfG GreyFox

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: [Problem] WinInet - Upload auf einen FTP Server

Beitrag von Michl »

Ich nutze kein lNet, sondern zumeist Synapse, doch wenn das

Code: Alles auswählen

putfile( '123.456.789', 'benutzer', 'passwort','C:\test.txt','/files/test.txt')
funktioniert,

würde ich als nächstes das probieren:

Code: Alles auswählen

procedure TFTP2Form.UploadButtonClick(Sender: TObject);
var
   fusername, fpassword, fserver, flocalfile, fremotefile: string;
begin
   fserver:='123.456.789';
   fusername:='benutzer';
   fpassword:='passwort';
   flocalfile:='C:\test.txt';
   fremotefile:='/files/test.txt';
 
   putfile( fserver, fusername , fpassword , flocalfile , fremotefile );
end;

Wenn das ebenfalls funktioniert, dann würde ich

Code: Alles auswählen

procedure TFTP2Form.UploadButtonClick(Sender: TObject);
var
   fusername, fpassword, fserver, flocalfile, fremotefile: string;
begin
   ServerEdit.Text:='123.456.789';
   fserver:=ServerEdit.Text;
   UserEdit.Text:='benutzer';
   fusername:=UserEdit.Text;
   PasswordEdit.Text:='passwort';
   fpassword:=PasswordEdit.Text;
   DateiPCEdit.Text:='C:\test.txt';
   flocalfile:=DateiPCEdit.Text;
   DateiFTPEdit.Text:='/files/test.txt';
   fremotefile:=DateiFTPEdit.Text;
 
   putfile( fserver, fusername , fpassword , flocalfile , fremotefile );
end;   
testen.

Wenn dies funktioniert, dann ist vermutlich etwas bei der Eingabe in den Edit-Feldern schief gelaufen?!

Weitere Probleme könnten Leerzeichen im Pfad sein oder die richtige Zeichenkodierung (z.B. Sonderzeichen im Pfad).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

GreyFox23
Beiträge: 2
Registriert: Do 16. Apr 2015, 22:45

Re: [Problem] WinInet - Upload auf einen FTP Server

Beitrag von GreyFox23 »

Ja, vielen Dank für die Antwort, am nächsten Tag ist mir aufgefallen, dass ich zwei Buchstaben bei der Server-URL vertauscht habe.

Ist damit also erledigt.

Antworten