AutoIt
AutoIt
Download Binary File to In-Memory Bytes
See more Google Drive Examples
This example demonstrates how to download the binary content of a file from Google Drive directly into local memory.Chilkat AutoIt Downloads
Local $bSuccess = False
$bSuccess = True
; It requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; This example uses a previously obtained access token having permission for the
; Google Drive scope.
$oGAuth = ObjCreate("Chilkat.AuthGoogle")
$oGAuth.AccessToken = "GOOGLE-DRIVE-ACCESS-TOKEN"
$oRest = ObjCreate("Chilkat.Rest")
; Connect using TLS.
; A single REST object, once connected, can be used for many Google Drive REST API calls.
; The auto-reconnect indicates that if the already-established HTTPS connection is closed,
; then it will be automatically re-established as needed.
Local $bAutoReconnect = True
$bSuccess = $oRest.Connect("www.googleapis.com",443,True,$bAutoReconnect)
; Provide the authentication credentials (i.e. the access token)
$oRest.SetAuthGoogle($oGAuth)
; ------------------------------------------------------------------------------
; To download a file, we must know the file ID.
; In a previous example (see Build Local Metadata Cache
; we built a local cache to make it easy to lookup file IDs given a file path.
; Let's say we want to download "testFolder/abc/123/penguins.jpg".
; First we lookup the fileId in the cache. With the fileId, we can download the file.
$oGdCache = ObjCreate("Chilkat.Cache")
$oGdCache.Level = 0
$oGdCache.AddRoot "C:/ckCache/googleDrive"
Local $sFileId = $oGdCache.FetchText("testFolder/abc/123/penguins.jpg")
If ($oGdCache.LastMethodSuccess <> True) Then
ConsoleWrite("Filepath not found in cache." & @CRLF)
Exit
EndIf
; We need to send a GET request like this:
; GET https://www.googleapis.com/drive/v3/files/fileId?alt=media
; The fileId is part of the path.
$oSbPath = ObjCreate("Chilkat.StringBuilder")
$oSbPath.Append("/drive/v3/files/")
$oSbPath.Append($sFileId)
$oRest.AddQueryParam("alt","media")
; To download to memory, we'll send the request in one call, then receive
; the response header, and then the response body.
; If the response header indicates failure or an unexpected response, then the
; body is not the data we desire.
; First send the HTTP request.
$bSuccess = $oRest.SendReqNoBody("GET",$oSbPath.GetAsString())
If ($bSuccess <> True) Then
ConsoleWrite($oRest.LastErrorText & @CRLF)
Exit
EndIf
; Get the response header.
Local $iStatusCode = $oRest.ReadResponseHeader()
If ($iStatusCode <> 200) Then
ConsoleWrite("response status code = " & $oRest.ResponseStatusCode & @CRLF)
ConsoleWrite("response status text = " & $oRest.ResponseStatusText & @CRLF)
ConsoleWrite("response header: " & $oRest.ResponseHeader & @CRLF)
; Read the response body (which should be error text or HTML)
Local $sErrResponseBody = $oRest.ReadRespBodyString()
If ($oRest.LastMethodSuccess = True) Then
ConsoleWrite("response body: " & $sErrResponseBody & @CRLF)
EndIf
Exit
EndIf
; Read the response body, which should contain the file data.
Local $oJpgBytes
$oJpgBytes = $oRest.ReadRespBodyBinary()
If ($oRest.LastMethodSuccess <> True) Then
ConsoleWrite($oRest.LastErrorText & @CRLF)
Exit
EndIf
; Save jpgBytes to a file so we can examine the file to verify that it worked.
$oFac = ObjCreate("Chilkat.FileAccess")
$oFac.WriteEntireFile("qa_output/penguins_out.jpg",$oJpgBytes)
ConsoleWrite("File downloaded." & @CRLF)