Seite 1 von 1

Größe einer herunterzuladenden Datei ermitteln

Verfasst: 01.12.2018 10:25
von Kiffi
Ich habe hier ein leicht abgewandeltes Beispiel aus der PB-Dokumentation, um eine Datei aus dem Internet herunterzuladen:

Code: Alles auswählen

EnableExplicit

Define Download, Progress, Size

InitNetwork()

Download = ReceiveHTTPFile("http://www.purebasic.com/download/OgreAssimpConverter.zip", GetTemporaryDirectory() + "OgreAssimpConverter.zip", #PB_HTTP_Asynchronous)

If Download
  
  Repeat
    
    Progress = HTTPProgress(Download)
    
    Select Progress
        
      Case #PB_HTTP_Success
        Size = FinishHTTP(Download)
        Debug "Download finished (size: " + Size + ")"
        Break
        
      Case #PB_HTTP_Failed
        Debug "Download failed"
        Break
        
      Case #PB_HTTP_Aborted
        Debug "Download aborted"
        Break
        
      Default
        Debug "Current download: " + Progress
        
    EndSelect
    
    Delay(500)
    
  ForEver
  
Else
  
  Debug "Download error"
  
EndIf
Funktioniert auch soweit ganz gut. Nun möchte ich gerne vor dem Download wissen, wie groß diese Datei ist, damit ich ausgeben kann, wie viel Prozent schon heruntergeladen wurden.

Wie geht das?

Danke im Voraus & Grüße ... Peter

Re: Größe einer herunterzuladenden Datei ermitteln

Verfasst: 01.12.2018 10:48
von Shardik
Du kannst vorher GetHTTPHeader() verwenden um die Dateigröße zu ermitteln. Mein Beispiel ist plattformunabhängig, und ich habe es gerade erfolgreich auf MacOS 10.6.8 'Snow Leopard' mit PB 5.62 x86 getestet:

Code: Alles auswählen

#URL = "https://www.purebasic.com/download/OgreAssimpConverter.zip"

If InitNetwork()
  Header$ = GetHTTPHeader(#URL)
  
  Repeat
    Index + 1
    Line$ = StringField (Header$, Index, #LF$ )
    
    If FindString (Line$, "Content-Length:", 1)
      FileSize = Val(StringField (Line$, 2, ":"))
      Break
    EndIf
  Until Line$ = ""
  
  MessageRequester("Info", "Dateigröße: " + FileSize + " Bytes")
EndIf

Re: Größe einer herunterzuladenden Datei ermitteln

Verfasst: 01.12.2018 11:43
von Mijikai
Optional wenn OS = Windows

Code: Alles auswählen

;HttpQueryInfo_() mit -> #HTTP_QUERY_FLAG_NUMBER|#HTTP_QUERY_CONTENT_LENGTH

Re: Größe einer herunterzuladenden Datei ermitteln

Verfasst: 01.12.2018 12:36
von Kiffi
Perfekt, vielen Dank! :allright:

Grüße ... Peter

Re: Größe einer herunterzuladenden Datei ermitteln

Verfasst: 01.12.2018 13:25
von GPI
Wichtig Content-Length ist optional, das muss nicht vorhanden sein. Das musst du unbedingt abfangen, sonst hast du ein Durch-Null-Fehler

Re: Größe einer herunterzuladenden Datei ermitteln

Verfasst: 01.12.2018 13:29
von Kiffi
GPI hat geschrieben:Wichtig Content-Length ist optional, das muss nicht vorhanden sein. Das musst du unbedingt abfangen, sonst hast du ein Durch-Null-Fehler
ok, gut zu wissen. Danke für den Tipp!

Re: Größe einer herunterzuladenden Datei ermitteln

Verfasst: 01.12.2018 22:57
von DarkDragon
GPI hat geschrieben:Wichtig Content-Length ist optional, das muss nicht vorhanden sein. Das musst du unbedingt abfangen, sonst hast du ein Durch-Null-Fehler
Genau, und viele Download Werkzeuge zeigen in dem Fall einen Marquee Progressbar an und wieviel bislang runtergeladen wurde.