File Transfer
Moderator: Moderatoren
File Transfer
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
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
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: File Transfer
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: File Transfer
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
>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
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: File Transfer
Achim,
die Samples liegen unter C:\Users\[benutzer]\Documents\Xbase++\source\samples (Desktop) bzw. unter C:\inetpub\wwwroot\websamples (Web-Samples)
Jan
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: File Transfer
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.
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
Hubert
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: File Transfer
Den TotalCommander aus Xbase++ heraus ansteuern zum Download? Interessant, daß das geht.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9357
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: File Transfer
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
Tom
- Koverhage
- 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
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.).
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
Klaus
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9357
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: File Transfer
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.
Edit: PutFile und GetFile (Heißt die Methode so? Ich bin nicht sicher) haben auch Callbacks, über die eine Fortschrittsanzeige bestückt werden kann.
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
Tom
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: File Transfer
Hier ist Beispielcode (etwas mehr als 5 Zeilen):
Für den Fortschrittbalken nutze ich eXPress++, aber in den CallBack kann man natürlich auch jede andere Funktion integrieren.
Die downlsize habe ich mir vorher über eine Suche im Array über aF:=oFtp:Directory() geholt (ich weiss ja, wie mein Update heißt).
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()
Viele Grüße
Wolfgang
Wolfgang
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: File Transfer
Ist das XB2.NET ?Wolfgang Ciriack hat geschrieben: ↑Fr, 17. Mai 2019 17:52 Hier ist Beispielcode (etwas mehr als 5 Zeilen):
...
Die downlsize habe ich mir vorher über eine Suche im Array über aF:=oFtp:Directory() geholt (ich weiss ja, wie mein Update heißt).
Sieht wirklich simpel aus
Gruß
Hubert
Hubert
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2934
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2121
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 72 Mal
Re: File Transfer
Hat er schon, ist nur nicht dokumentiert:
Code: Alles auswählen
oFtp:progress := {|nProzent|debugprint("Übertragen % " + ltrim(str(nProzent)))}
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
Re: File Transfer
Hallo zusammen,
ich habe das nun mal mit Xbase Bordmitteln realisiert. Falls es jemanden interessiert:
"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
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)
Gruss
Achim