Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Datei auf FTP Server OHNE Indy (https://www.delphipraxis.net/208254-datei-auf-ftp-server-ohne-indy.html)

Stewag 4. Jul 2021 14:49

Datei auf FTP Server OHNE Indy
 
Ich nutze zum Download einer Datei von einer gesicherten Webseite THTTPClient da dieser im Gegensatz zur Indy Komponente TidHTTP keine SSl Libs benötigt.
Das klappt gut.

Für einen Upload auf einen gesicherten FTP Server würde ich gerne ebenso vorgehen, d.h. unter Verwendung von THTTPClient oder TNetHTTPClient / TNetHTTPRequest.
Die Zielumgebung ist MacOS.

Leider scheint dies kein sonderlich häufig genutztes Vorgehen zu sein, denn üblicherweise wird dafür auf die Indy Komponente verwiesen.
Daher wohl finde ich kein Code-Beispiel für die alternative Methode, nur die entsprechende Emba Hilfe.
Damit komme ich aber nicht weiter.

Hat jemand ein Code-Beispiel für den POST Upload einer Datei per Stream, ohne SSL libs?

Papaschlumpf73 4. Jul 2021 16:51

AW: Datei auf FTP Server OHNE Indy
 
Ich könnte dir einen http/https-Upload anbieten. TmpFile ist der komplette Pfad und Name der lokalen Datei:

Delphi-Quellcode:
NetHttpClient1.Put('http://deinedomain.de/'+RemoteDir+ExtractFileName(TmpFile), TmpFile);



Und zum Authentifizieren:

Delphi-Quellcode:
procedure TForm3.NetHTTPClient1AuthEvent(const Sender: TObject; AnAuthTarget: TAuthTargetType; const ARealm, AURL: string; var AUserName, APassword: string; var AbortAuth: Boolean; var Persistence: TAuthPersistenceType);
begin
if AnAuthTarget = TAuthTargetType.Server then
 begin
 {Achtung: bei falschem Password wird keine Exception (auch nicht beim Upload geworfen}
 AUserName:='deinusername';
 APassword:='deinpasswort';
 end;
end;

TurboMagic 4. Jul 2021 16:57

AW: Datei auf FTP Server OHNE Indy
 
Die erwähnten mit Delphi mitgelieferten Komponenten dürften auf HTTP Funktionalitäten
des jeweiligen OS aufsetzen. Ich weiß jetzt aber nicht, ob die betreffenden Betriebssysteme
für FTP überhaupt entsprechende APIs anbieten.

Zumindest für WIndows gibt's als open source Alternative zu Indy noch ICS.
http://www.overbyte.eu

Stewag 4. Jul 2021 19:37

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1491821)

Delphi-Quellcode:
NetHttpClient1.Put('http://deinedomain.de/'+RemoteDir+ExtractFileName(TmpFile), TmpFile);

...danke Papaschlumpf!

Ich habe alle möglichen Kombinationen probiert:
https://domain.de
https://www.domain.de
ftp://domain.de
ftp://ftp.domain.de
etc.

Sowohl mit Put als auch mit Post.

Leider klappt es bereits unter Windows nicht.:pale:

Hast Du eine Idee?

Gruß
Steffen

zeras 4. Jul 2021 19:48

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Zitat von Stewag (Beitrag 1491830)

Ich habe alle möglichen Kombinationen probiert:
https://domain.de
https://www.domain.de
ftp://domain.de
ftp://ftp.domain.de
etc.

Sowohl mit Put als auch mit Post.

Leider klappt es bereits unter Windows nicht.:pale:

Hast Du eine Idee?

Gruß
Steffen

Hast du auch auf der Gegenseite ein Programm, was deine Daten entgegennimmt (FTP Server, HTTP Server, PHP Script)?

Stewag 4. Jul 2021 20:08

AW: Datei auf FTP Server OHNE Indy
 
... oh, dort muss ebenfalls ein Delphi Programm laufen?:oops:

Nein, ist der gewöhnliche FTP Server meiner Webseite. Ich wüsste auch nicht, wie ich dort eine Software installieren könnte.

zeras 4. Jul 2021 20:15

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Zitat von Stewag (Beitrag 1491834)
... oh, dort muss ebenfalls ein Delphi Programm laufen?:oops:

Nein, ist der gewöhnliche FTP Server meiner Webseite. Ich wüsste auch nicht, wie ich dort eine Software installieren könnte.

Beim Download ist das viel einfacher. Wenn auf einem FTP/HTTP Link eine Datei liegt, kannst du diese runterladen. Gegebenenfalls mit Anmeldung.

Bei einem Upload brauchst du jemanden, der die Datei entgegennimmt. Das kann ein FTP Server sein oder aber ein Website, wo ein Script läuft.
Kannst du zum Test eine ungesicherte Verbindung aufbauen und dann testen?
Siehst du auf dem FTP Server in den Logs, dass sich da jemand verbinden will?

Papaschlumpf73 4. Jul 2021 20:16

AW: Datei auf FTP Server OHNE Indy
 
Oje, jetzt müssen wir erst mal mit den Begriffen aufräumen. Http ist ein Protokoll und ftp ebenfalls. Das heißt: NetHttpClient spricht auch nur http bzw. https aber nicht ftp. Dazu kommt, dass auf den meisten Webservern schon aus Sicherheitsgründen gar kein "echter" FTP-Server mehr läuft, sondern FTPS oder SFTP. Das sind aber alles unterschiedliche Sachen.

Daher würde ich den Upload eben auch über http(s) machen. Wichtig: Du brauchst dafür nicht die "angeblichen" ftp-Zugangsdaten, sondern die WebDAV-Zugangsdaten. WebDAV läuft über https.

Bei welchem Hoster läuft deine Domain?

Stewag 4. Jul 2021 20:23

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Bei welchem Hoster läuft deine Domain?
One.com. In der FAQ dort finde ich allerdings gar kein WebDav.

Stewag 4. Jul 2021 20:24

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Siehst du auf dem FTP Server in den Logs, dass sich da jemand verbinden will?
Nein. Geht das evtl. mit FileZilla?

Papaschlumpf73 4. Jul 2021 20:47

AW: Datei auf FTP Server OHNE Indy
 
Ok, one.com verwendet SFTP. Klingt zwar wie FTP, ist aber ein völlig anderes Protokoll. In Delphi gibt es m.E. keine Komponenten (auch nicht bei Indy), mit denen du eine SFTP-Verbindung herstellen kannst.

Stewag 4. Jul 2021 20:49

AW: Datei auf FTP Server OHNE Indy
 
... auch meine beiden anderen Provider, artfiles.de und alfahosting.de bieten offenbar kein WebDav an:pale:

Papaschlumpf73 4. Jul 2021 20:52

AW: Datei auf FTP Server OHNE Indy
 
Ich bin bei IONOS / 1&1. Da ist das Standard; da klappt es auch mit den Nethttpclient.put()

philipp.hofmann 4. Jul 2021 21:15

AW: Datei auf FTP Server OHNE Indy
 
Ich nutze das WebDav von meinem Strato-HiDrive für solche Zwecke. Funktioniert wunderbar mit TNetHTTPClient.put mit der hier schon beschriebenen Authentication und auch mit https und ist v.a. im Download deutlich schneller als meine bei gehostete Strato-Website. Du musst dann nur neben der Website eben ein HiDrive haben. Dies kostet ab 3 EUR im Monat und es gibt immer Aktionen, es günstig aufzurüsten (mehr Speicher oder mehr User), also besser mit einem kleinen Paket beginnen.

mytbo 4. Jul 2021 21:16

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Zitat von Stewag (Beitrag 1491834)
Nein, ist der gewöhnliche FTP Server meiner Webseite. Ich wüsste auch nicht, wie ich dort eine Software installieren könnte.

Wenn es nur für deinen Webserver ist, kannst du es auch mit Windows Bordmitteln lösen. Hier ein Beispiel:

Schreibe eine Batchdatei MeinFTPUpload.bat
Code:
@echo off
ftp -n -i -s:MeinFTPUpload.ftp
echo *** Upload fertig ***
pause
Schreibe die Steuerdatei MeinFTPUpload.ftp
Code:
open ftp.meine-domain.de
user admin@meine-domain.de meinGeheimesPasswort
bin
lcd C:\MeinLokalesDatenVerzeichnis
put meineUploadDatei1.dat
put meineUploadDatei2.dat
quit
Alle möglichen Parameter für den FTP Befehl findest du in der MS-Hilfe.

Bis bald...
Thomas

himitsu 4. Jul 2021 21:48

AW: Datei auf FTP Server OHNE Indy
 
WebDAV ist doch in PHP integriert?

Ich dachte damit kann man auch einen Server aufsetzen?
Jedenfalls bietet sowas wie ownCloud und Andere auch einen WebDAV-Server an.



In Windows ist zwar FTP drin, aber über CreateFile/TFileStream/usw. ist es nicht "direkt" nutzbar.
Es gibt in der WinAPI einige schnittstellen für FTP, aber wenn es sein muß, dann kann man auch mit SUBST und Co. ein Laufwerk oder Unterverzeichnis auf FTP umleiten und Jenes dann dennoch CreateFile/TFileStream/usw. nutzen.
[edit] gibt auf dem Mac bestimmt auch sowas [/edit]

Witzig: Im OpenDialog ist sogar was drin, aber natürlich nur für den Download.
Da kann man HTTP- und FTP-URLs in das Dateiname-Edit einfügen und öffnen. (jenes wird dann windows-intern über den InternetExplorer runtergeladen und die Datei aus dem Cache übergeben ... genauso wie FTP im Explorer auch durch den IECache läuft)

Klaus01 5. Jul 2021 06:13

AW: Datei auf FTP Server OHNE Indy
 
.. für SFTp kann ich secureBridge von DevArt empfehlen.
IP*Works hat auch einen SFTP Client - aber nicht in der Delphi Version.

Mit putty ließe sich auch ein SFTP Client bauen.

Grüße
Klaus

Neumann 5. Jul 2021 06:46

AW: Datei auf FTP Server OHNE Indy
 
Es gibt auch noch WINSCP, damit kann man leicht eine SFTP-Verbindung herstellen. Was es aber besonders interessant macht, ist das man es als Kommadozeilen-Anwendung (WINSCP.COM) mit Scripten aufrufen und steuern kann. Beschreibung dazu gibt es auch.

Papaschlumpf73 5. Jul 2021 07:47

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Zitat von Stewag (Beitrag 1491820)
Die Zielumgebung ist MacOS.

Oje, so viele Vorschläge für Windows... :-D

Klaus01 5. Jul 2021 08:00

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Zitat von Papaschlumpf73 (Beitrag 1491860)
Zitat:

Zitat von Stewag (Beitrag 1491820)
Die Zielumgebung ist MacOS.

Oje, so viele Vorschläge für Windows... :-D

secureBridge kann auch für MacOs verwendet werden.

Grüße
Klaus

Stewag 5. Jul 2021 16:51

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

Wenn es nur für deinen Webserver ist, kannst du es auch mit Windows Bordmitteln lösen. Hier ein Beispiel:

Schreibe eine Batchdatei MeinFTPUpload.bat

Es geht nicht darum, dass ich eine Datei auf meinen FTP Server laden will. Das bekomme ich wohl noch so hin.
Ich will dass ein Kunde, der mein Programm nutzt, einen Stream auf meinem FTP Server ablegen kann.

Wäre das ohne WebDav durch die Verwendung von Indy und den SLL-Libs möglich oder gelten dafür die gleichen Limitationen?

Klaus01 5. Jul 2021 16:59

AW: Datei auf FTP Server OHNE Indy
 
.. Du hattest im ersten Post geschrieben "gesicherter FTP Server"
Ist das dann ein SFTP oder ein FTPs (FTP over SSL)?

Grüße
Klaus

philipp.hofmann 5. Jul 2021 17:05

AW: Datei auf FTP Server OHNE Indy
 
Wenn ich mich recht entsinne, kann Indy nur FTP, aber kein SFTP.
Wenn dein Server auch FTP unterstützt, dann geht es.
Die SSL-Libraries brauchst du dann auch nicht, überträgst aber alles unverschlüsselt.

Für SFTP brauchst du andere Komponenten (z.B. Devart, welches auch MacOS unterstützt), das kann Delphi nicht mit Bordmitteln.
WebDav wird von Delphi-Bord-Mittel unterstützt, da brauchst du auch kein Indy, sondern kannst TNetHTTPClient verwenden. Dann kümmert sich bei https-Verbindungen das OS automatisch um die SSL-Libraries.

Stewag 6. Jul 2021 08:07

AW: Datei auf FTP Server OHNE Indy
 
I now used Indy TIdFTP to Upload file to FTP successfully.

Code:
with IdFTP1 do
  begin
    Host := [ftp server name];
    User := [User];
    Password := [PW];
    Passive := true;
    Connect;
    Put(sourcefilename, targetfilename_withpath)
  end;
As you mentioned, no SSL libs necessary with regular FTP.
Thank you for your advice! :-D

Klaus01 6. Jul 2021 08:51

AW: Datei auf FTP Server OHNE Indy
 
.. in der heutigen Zeit, würde ich, wenn es eben geht, auf FTP verzichten und SFTP nutzen.
Wie schon erwähnt, werden bei FTP Username, Passwort und Daten unverschlüsselt übertragen.

Grüße
Klaus

KodeZwerg 6. Jul 2021 10:18

AW: Datei auf FTP Server OHNE Indy
 
Microsoft schreibt dieses, aber ich weiß nichts damit anzufangen.
Vielleicht als PowerShell skript?

Stewag 6. Jul 2021 11:12

AW: Datei auf FTP Server OHNE Indy
 
Zitat:

.. in der heutigen Zeit, würde ich, wenn es eben geht, auf FTP verzichten und SFTP nutzen.
Wie schon erwähnt, werden bei FTP Username, Passwort und Daten unverschlüsselt übertragen.

Grüße
Klaus
... korrekt, aber dann benötigt man eine kommerzielle Kompo.

Für meinem Fall reicht mir hier das reguläre FTP.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 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