Seite 1 von 1

Download to Memory

Verfasst: 03.12.2004 23:15
von Deeem2031
Da auf purearea.net ein schlechtes Beispiel für den Download einer Datei in den Speicher steht will ich hier mal meine Version posten.
Das mit den Parametern hab ich zwar nicht sehr schlau gelöst, mir ist aber keine bessere Lösung eingefallen.

Code: Alles auswählen

Procedure DownloadUrltoMem(*inURLoutBuffer.LONG,*Len.LONG)
  Protected Buffer, offset, hOpen, hFile, ret
  #INTERNET_OPEN_TYPE_DIRECT = 1
  #INTERNET_FLAG_RELOAD = $80000000
  
  offset = 0
  Buffer = AllocateMemory(1)
  If Buffer
    hOpen = InternetOpen_("", #INTERNET_OPEN_TYPE_DIRECT, "", "", 0)
    If hOpen
      hFile = InternetOpenUrl_(hOpen, PeekS(*inURLoutBuffer\l,*Len\l), "", 0, #INTERNET_FLAG_RELOAD, 0)
      If hFile
        Repeat
          InternetQueryDataAvailable_(hFile,@tlen,0,0)
          Buffer = ReAllocateMemory(Buffer,offset+tlen)
          InternetReadFile_(hFile, Buffer+offset, tlen, @ret)
          If ret > 0
            offset + tlen
          EndIf
        Until ret = 0
        InternetCloseHandle_(hFile)
      Else
        InternetCloseHandle_(hOpen)
        FreeMemory(Buffer)
        ProcedureReturn #False
      EndIf
      InternetCloseHandle_(hOpen)
    Else
      FreeMemory(Buffer)
      ProcedureReturn #False
    EndIf
  Else
    ProcedureReturn #False
  EndIf
  
  *inURLoutBuffer\l = Buffer
  *Len\l = offset
  ProcedureReturn #True
EndProcedure

Url.s = "http://www.robsite.de/"
inURLoutBuffer = @Url
len = Len(Url)
If DownloadUrltoMem(@inURLoutBuffer,@len)
  MessageRequester("",PeekS(inURLoutBuffer,len))
  FreeMemory(inURLoutBuffer)
EndIf

Verfasst: 12.12.2004 00:32
von Deeem2031

Verfasst: 12.12.2004 11:58
von bingo
klasse :allright:

man kann da einiges mit machen ... :)

Code: Alles auswählen

Procedure DownloadUrltoMem(*inURLoutBuffer.LONG,*Len.LONG) 
  Protected Buffer, offset, hOpen, hFile, ret 
  #INTERNET_OPEN_TYPE_DIRECT = 1 
  #INTERNET_FLAG_RELOAD = $80000000 
  
  offset = 0 
  Buffer = AllocateMemory(1) 
  If Buffer 
    hOpen = InternetOpen_("", #INTERNET_OPEN_TYPE_DIRECT, "", "", 0) 
    If hOpen 
      hFile = InternetOpenUrl_(hOpen, PeekS(*inURLoutBuffer\l,*Len\l), "", 0, #INTERNET_FLAG_RELOAD, 0) 
      If hFile 
        Repeat 
          InternetQueryDataAvailable_(hFile,@tlen,0,0) 
          Buffer = ReAllocateMemory(Buffer,offset+tlen) 
          InternetReadFile_(hFile, Buffer+offset, tlen, @ret) 
          If ret > 0 
            offset + tlen 
          EndIf 
        Until ret = 0 
        InternetCloseHandle_(hFile) 
      Else 
        InternetCloseHandle_(hOpen) 
        FreeMemory(Buffer) 
        ProcedureReturn #False 
      EndIf 
      InternetCloseHandle_(hOpen) 
    Else 
      FreeMemory(Buffer) 
      ProcedureReturn #False 
    EndIf 
  Else 
    ProcedureReturn #False 
  EndIf 
  
  *inURLoutBuffer\l = Buffer 
  *Len\l = offset 
  ProcedureReturn #True 
EndProcedure 

Url.s = "http://www.tangerinedream.org/mod/gallery/media/thumbnails/10.jpg" 
inURLoutBuffer = @Url 
len = Len(Url) 
If DownloadUrltoMem(@inURLoutBuffer,@len) 
  UseJPEGImageDecoder() 
  ;Debug len ;->bildgröße in byte
  CatchImage(1, inURLoutBuffer) 
  FreeMemory(inURLoutBuffer) 
  OpenWindow(0,0,0,245,105,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"downloadimage²gadget")
  CreateGadgetList(WindowID(0)) 
  ImageGadget(0, 10,10,ImageHeight(),ImageWidth(),UseImage(1))
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
FreeImage(1)
EndIf