File Transfer

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Statler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Di, 22. Jan 2008 9:49
Wohnort: Aachen

File Transfer

Beitrag von Statler »

Hallo zusammen,

ich moechte innerhalb meiner Applikation Updates herunterladen. Xbase 2.0 bietet einen FTP Client an. Dieser hat allerdings keinen Callback Slot, um einen Fortschritsbalken zu realisieren.

Die schoenste Losung waere eigentlich ein HTTP Download. Diesbezueglich habe ich allerdings nichts gefunden.

Gibt es zu dieser Problematik praktikable Loesungen ?

Gruss

Achim
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Jan »

Hallo Achim,

in der Doku zu HttpClient() gibt es weiter unten ein Sample zum Download. Keine Ahnung ob das für Diene Bedürfnisse passen würde.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von brandelh »

LoadFromUrl() habe ich dafür benutzt (HTTP Download)
Gruß
Hubert
Statler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Di, 22. Jan 2008 9:49
Wohnort: Aachen

Re: File Transfer

Beitrag von Statler »

Hallo,

>LoadFromUrl() habe ich dafür benutzt (HTTP Download)

das heist, die Datei landet in einer Variablen und wird dann via FWRITE auf die Platte geschrieben ? Ein Callback ist bei dieser Funktion moeglich, von daher ist das das, was ich suche. 10 - 15 Mb in eine Variable zu laden ist problemlos moeglich ?

Unter Xbase 1.9 gab es auf der CD jede Menge Samples, auf meiner 2.0 CD ist diesbezueglich nichts vorhanden. Kann man sich die Samples irgendwo runterladen ?

Gruss

Achim
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Jan »

Achim,

die Samples liegen unter C:\Users\[benutzer]\Documents\Xbase++\source\samples (Desktop) bzw. unter C:\inetpub\wwwroot\websamples (Web-Samples)

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von brandelh »

100 MB sind auf einem heute üblichen PC problemlos in eine Variable zu bekommen.
Beim Schreiben der Daten aber nicht MemoWrit() nutzen, das könnte Zeichen verändern, sondern z.B. StrFile() von Xbase 2.0 oder den XbTools3, oder eine meiner Funktionen die auf FOPEN basieren aus der Wissensdatenbank.
Gruß
Hubert
Statler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Di, 22. Jan 2008 9:49
Wohnort: Aachen

Re: File Transfer

Beitrag von Statler »

besten Dank fuer die Info's, damit duerfte mein Problem geloest sein

Gruss

Achim
sosix1
Rookie
Rookie
Beiträge: 1
Registriert: Fr, 17. Mai 2019 10:26
Kontaktdaten:

Re: File Transfer

Beitrag von sosix1 »

Ich benutze Filezilla oder Totalcommander und es funktioniert immer.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Jan »

Den TotalCommander aus Xbase++ heraus ansteuern zum Download? Interessant, daß das geht.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Tom »

Ein sehr handlicher, robuster und problemlos mit einer Fortschrittsanzeige kombinierbarer FTP-Client (auch mit SSL) ist mit Xb2.Net auch nur ein Fünfzeiler. Bzw. als Fünfzeiler eingebunden, denn den Client gibt's ja als Klasse.
Herzlich,
Tom
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Koverhage »

Tom,
der 5-Zeiler wäre nett.
Fortschrittsanzeige ist so eine Sache. Ich wäre froh wenn alle verpflichtet würden eine anzuzeigen. Dann wäre der BS wahrscheinlich
voll, aber man könnte erkennen welche Anwendung den PC verlangsamt (Thunderbird, Firefox, Windows, etc.).
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Tom »

Schau einfach mal in das FTP-Client-Beispiel, Klaus. Du musst das Client-Objekt erzeugen und initialisieren, einen Connect durchführen, Dich einloggen, und dann PutFile oder GetFile machen (ggf. noch einen Verzeichniswechsel vorher), das isses auch schon. Die Fehlerbehandlung läuft über einen Callback-Slot. Wenn Du mehr Komfort oder Optik willst, wächst der Aufwand natürlich, aber im Kern sind das tatsächlich so um die fünf Zeilen. 8)

Edit: PutFile und GetFile (Heißt die Methode so? Ich bin nicht sicher) haben auch Callbacks, über die eine Fortschrittsanzeige bestückt werden kann.
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Wolfgang Ciriack »

Hier ist Beispielcode (etwas mehr als 5 Zeilen): :D
Für den Fortschrittbalken nutze ich eXPress++, aber in den CallBack kann man natürlich auch jede andere Funktion integrieren.

Code: Alles auswählen

oFtp := XbFTPClient():new()
if oFtp:Connect(cGDServer)
   if oFtp:Login(Ftp_User, Ftp_Passw)
      oFtp:PassiveMode:=.T.
      oFtp:SetCallBack( {|a,b| DC_Getprogress(oPrDaten, oFtp:BytesTransferred , downlsize) })
      if oFtp:GetFile(downlfile, zielpath+"\"+downlfile)
      endif
   endif
endif
oFTP:close()
oFtp:destroy()
Die downlsize habe ich mir vorher über eine Suche im Array über aF:=oFtp:Directory() geholt (ich weiss ja, wie mein Update heißt).
Viele Grüße
Wolfgang
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Koverhage »

Wolfgang,
Danke.
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von brandelh »

Wolfgang Ciriack hat geschrieben: Fr, 17. Mai 2019 17:52 Hier ist Beispielcode (etwas mehr als 5 Zeilen): :D
...
Die downlsize habe ich mir vorher über eine Suche im Array über aF:=oFtp:Directory() geholt (ich weiss ja, wie mein Update heißt).
Ist das XB2.NET ?
Sieht wirklich simpel aus ;-)
Gruß
Hubert
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Wolfgang Ciriack »

Ja, ist es.
Viele Grüße
Wolfgang
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: File Transfer

Beitrag von Tom »

Aber mir glaubt keiner. :angry4:
Herzlich,
Tom
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: File Transfer

Beitrag von Werner_Bayern »

Statler hat geschrieben: Mo, 04. Mär 2019 9:53 ich moechte innerhalb meiner Applikation Updates herunterladen. Xbase 2.0 bietet einen FTP Client an. Dieser hat allerdings keinen Callback Slot, um einen Fortschritsbalken zu realisieren.
Hat er schon, ist nur nicht dokumentiert:

Code: Alles auswählen

oFtp:progress := {|nProzent|debugprint("Übertragen % " + ltrim(str(nProzent)))}
Leider nur bei :putFile(), nicht bei :getFile() - was Du aber bräuchtest. Schreib doch mal an Alaska, evtl. machen die das dann auch bei getFile.
es grüßt

Werner

<when the music is over, turn off the lights!>
Statler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Di, 22. Jan 2008 9:49
Wohnort: Aachen

Re: File Transfer

Beitrag von Statler »

Hallo zusammen,

ich habe das nun mal mit Xbase Bordmitteln realisiert. Falls es jemanden interessiert:

Code: Alles auswählen

oFHandle:= AKaFHandle ():new ("Name der Zieldatei", FC_NORMAL, .T.)
*
nReceived:= 0
*
LoadFromUrl ("www.blabla.de/DateiName.zip",;
             INTERNET_DEFAULT_HTTP_PORT,;
             INTERNET_COMMUNICATION_PUBLIC, ;
             NIL,;
             NIL,;
             "GET",;
             NIL,;
             NIL,;
             "TBD", ;
             @nStatus,;
             {|nBlockSize, nFileSize, cDataBlock| ClbReceived (oFHandle, oProgressbar, nBlockSize, @nReceived, nFileSize, cDataBlock)})
*
nStatus:= IF (nStatus == NIL, 0, nStatus)
*
oFHandle:close ()


STATIC FUNCTION ClbReceived (oFHandle, oProgressbar, nBlockSize, nReceived, nFileSize, cDataBlock)
*
oFHandle:writeRow (cDataBlock, .F.)
*
nReceived:= nReceived + nBlockSize 
*
oProgressBar:setBar (100 * nReceived / nFileSize)
*
RETURN (NIL)
"oFHandle:= AKaFHandle ():new ("Name der Zieldatei", FC_NORMAL, .T.)" realisiert FCREATE (), FWRITE (), FCLOSE () etc., darum benutze ich diese Klasse. Die Datei wird blockweise im "ClbReceived" Callback geschrieben. Gleichzeitig erfolgt die Ausgabe des Fortschrittbalkens.

Gruss

Achim
Antworten