Sample code for 30+ languages & platforms
Visual FoxPro

Download File (Stream to Local Filesystem)

See more Google Drive Examples

This example demonstrates how to download the content of a file from Google Drive. The file is streamed to the local filesystem.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loGAuth
LOCAL loRest
LOCAL lnBAutoReconnect
LOCAL loGdCache
LOCAL lcFileId
LOCAL loSbPath
LOCAL loFileStream
LOCAL lcJsonResponse

lnSuccess = 0

lnSuccess = 1

* 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.

loGAuth = CreateObject('Chilkat.AuthGoogle')
loGAuth.AccessToken = "GOOGLE_DRIVE_ACCESS_TOKEN"

loRest = CreateObject('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.
lnBAutoReconnect = 1
lnSuccess = loRest.Connect("www.googleapis.com",443,1,lnBAutoReconnect)

* Provide the authentication credentials (i.e. the access token)
loRest.SetAuthGoogle(loGAuth)

* ------------------------------------------------------------------------------
* 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.
loGdCache = CreateObject('Chilkat.Cache')
loGdCache.Level = 0
loGdCache.AddRoot("C:/ckCache/googleDrive")

lcFileId = loGdCache.FetchText("testFolder/abc/123/penguins.jpg")
IF (loGdCache.LastMethodSuccess <> 1) THEN
    ? "Filepath not found in cache."
    RELEASE loGAuth
    RELEASE loRest
    RELEASE loGdCache
    CANCEL
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.
loSbPath = CreateObject('Chilkat.StringBuilder')
loSbPath.Append("/drive/v3/files/")
loSbPath.Append(lcFileId)
loRest.AddQueryParam("alt","media")

* Create a stream object with a SinkFile set to the path where the downloaded file will go.
loFileStream = CreateObject('Chilkat.Stream')
loFileStream.SinkFile = "qa_output/penguins.jpg"
* Indicate that the response body should stream directly to fileStream,
* but only if the response status is 200.  
loRest.SetResponseBodyStream(200,1,loFileStream)

* Download the file, streaming the content to the SinkFile.
lcJsonResponse = loRest.FullRequestNoBody("GET",loSbPath.GetAsString())
IF (loRest.LastMethodSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loGAuth
    RELEASE loRest
    RELEASE loGdCache
    RELEASE loSbPath
    RELEASE loFileStream
    CANCEL
ENDIF

* A successful response will have a status code equal to 200.
IF (loRest.ResponseStatusCode <> 200) THEN
    ? "response status code = " + STR(loRest.ResponseStatusCode)
    ? "response status text = " + loRest.ResponseStatusText
    ? "response header: " + loRest.ResponseHeader
    RELEASE loGAuth
    RELEASE loRest
    RELEASE loGdCache
    RELEASE loSbPath
    RELEASE loFileStream
    CANCEL
ENDIF

? "File downloaded."

RELEASE loGAuth
RELEASE loRest
RELEASE loGdCache
RELEASE loSbPath
RELEASE loFileStream