FTPProgress() liefert beim Upload keine Fortschrittwerte

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
RalfP
Beiträge: 51
Registriert: 17.03.2014 22:32
Computerausstattung: PC mit Intel i7 CPU, 16G Ram, Win11
Wohnort: 24321 Panker

FTPProgress() liefert beim Upload keine Fortschrittwerte

Beitrag von RalfP »

Hallo

Bei SendFTPFile() lässt sich mit FTPProgress() kein Fortschritt messen. Es wird der Wert für #PB_FTP_Started und der Wert für #PB_FTP_Finished geliefert, dazwischen kann ich nur '0' auslesen. Das gilt für SFTP wie für FTP. Getestet habe ich das mit den Servern bei Ionos und Hetzner.
Liegt das an den Servern? Müssen die Server irgend etwas liefern, damit ich etwas bekomme? Funktioniert es mit anderen Servern?

Kennt jemand eine andere Möglichkeit den Fortschritt beim Upload festzustellen, zb. mit API-Befehlen? Der Upload von 63MB dauert bei mir ca. 40s. Es ist blöd, wenn man dann nicht weiß, ob es funktioniert. Und ich möchte auch noch größere Dateien hochladen können.

Ich brauche die Fortschrittwerte für einen Fortschrittbalken, aber auch um ein TimeOut setzen zu können. So lange Werte kommen, soll der TimeOut-Counter immer wieder resetet werden. Ohne Fortschrittwerte kann ich nur eine Maximalzeit vorgeben (z.B. 60s), das würde dann aber die Dateigröße beschränken, oder ich muss ohne TimeOut hochladen. Das ist beides nicht befriedigend.

Hier ein Test-Programm:

Code: Alles auswählen

EnableExplicit

Enumeration
  #FtpNr
EndEnumeration

Define FTP_Server$    = ""
Define FTP_UserName$  = ""
Define FTP_Password$  = ""
Define Port           = 22 ; 21
Define Passiv         = #False ; #True


Define Pattern$ = "Alle Dateien (*.*)|*.*"
Define PfadUndDateiname$ = OpenFileRequester("Chose File", "", Pattern$, 0)
If PfadUndDateiname$ = "" : End : EndIf
Define Dateiname$ = GetFilePart(PfadUndDateiname$)


Procedure TransferControl()
  ; wartet auf das Ende des Up- oder Downloads und zeigt dabei den den Fortschritt an
  ; wenn der Transfer nicht beginnt oder stockt wird nach 30s abgebrochen
  Protected transmitted, oldtransmitted, cntr
  Repeat
    transmitted = FTPProgress(#FtpNr)
    Select transmitted
      Case #PB_FTP_Started  ; -1
        Debug "Dateitransfer gestartet"
      Case #PB_FTP_Finished ; -3
        Debug "Dateitransfer abgeschlossen"
        ProcedureReturn 1
      Case #PB_FTP_Error    ; -2
        Debug "Dateitransfer war fehlerhaft"
        ProcedureReturn 0
      Default
        Debug "Timer: " + Str(cntr/10) + "s :: Byte: " + Str(transmitted)
        If transmitted > oldtransmitted     ; wenn ein Fortschritt geschieht
          oldtransmitted = transmitted
          cntr = 0
        Else
          cntr + 1                   ; nur wenn der Transfer nicht läuft 
        EndIf
    EndSelect
    Delay(100)
  Until cntr >= 600         ; Abbruch nach 60s Untätigkeit
  AbortFTPFile(#FtpNr)
  Debug "Dateitransfer Timeout (>60s Pause)"
  ProcedureReturn 0         ; Zeitüberschreitung
EndProcedure  


If OpenFTP(#FtpNr, FTP_Server$, FTP_UserName$, FTP_Password$, Passiv, Port)
  Debug "Verbindung hergestellt"
; hier kommt der Test
  If SendFTPFile(#FtpNr, PfadUndDateiname$, Dateiname$, #True)  ; Asynchron
    Debug "Upload:"
    If TransferControl()  ; wartet max. 60s auf fertig
      Delay(1000)
      Debug ""
      Debug "Download:"
      If ReceiveFTPFile(#FtpNr, Dateiname$, GetTemporaryDirectory() + Dateiname$, #True)
        TransferControl()  ; wartet max. 60s auf fertig
        DeleteFile(GetTemporaryDirectory() + Dateiname$)
      EndIf
      If DeleteFTPFile(#FtpNr, Dateiname$)
        Debug "Die Datei auf dem Server wurde wieder gelöscht"
      Else
        Debug "Konnte die Datei auf dem Server nicht löschen"
      EndIf
    EndIf  
  Else
    Debug "Konnte die Datei nicht hochladen"
  EndIf
  CloseFTP(#FtpNr)
Else
  Debug "Verbindung konnte nicht aufgebaut werden"
EndIf
Meine Konfiguration:
PB-Version: PureBasic 6.20 (Windows - x64)
OS: Windows 8.1 64 Bit
Compilereinstellungen:
[ ] Unicode-Executable erstellen
[ ] Thread-sicheres Executable erstellen
[ ] OnError-Unterstützung einschalten
[x] Moderne Themen-Unterstützung aktivieren (für Windows XP und höher)
[ ] Administrator-Modus für Windows Vista und höher anfordern
[ ] User-Modus für Windows Vista und höher anfordern (keine Virtualisierung)
Library Subsystem: -

Grüße
Ralf
Benutzeravatar
RalfP
Beiträge: 51
Registriert: 17.03.2014 22:32
Computerausstattung: PC mit Intel i7 CPU, 16G Ram, Win11
Wohnort: 24321 Panker

Re: FTPProgress() liefert beim Upload keine Fortschrittwerte

Beitrag von RalfP »

Sorry, ich habe gerade gelesen, dass RSrole den Fehler bereits am 12. März im englischen Forum gemeldet hat und er am 14.März von Fred behoben wurde. Ich gelobe Besserung und werde zukünftig auch dort immer nachsehen.

Ralf
Antworten