Sample code for 30+ languages & platforms
Visual FoxPro

Upload Application Specific Data

See more Google Drive Examples

Uploads a text file (application specific data) where the contents of the file are contained in a string variable.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loJsonToken
LOCAL loGAuth
LOCAL loRest
LOCAL lnBAutoReconnect
LOCAL loJson
LOCAL lcFileContents
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 application specific data scope.
loJsonToken = CreateObject('Chilkat.JsonObject')
lnSuccess = loJsonToken.LoadFile("qa_data/tokens/googleDriveAppData.json")

loGAuth = CreateObject('Chilkat.AuthGoogle')
loGAuth.AccessToken = loJsonToken.StringOf("access_token")

loRest = CreateObject('Chilkat.Rest')

* Connect using TLS.
lnBAutoReconnect = 1
lnSuccess = loRest.Connect("www.googleapis.com",443,1,lnBAutoReconnect)

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

* A multipart upload to Google Drive needs a multipart/related Content-Type
loRest.AddHeader("Content-Type","multipart/related")

* Specify each part of the request.

* The 1st part is JSON with information about the file.
loRest.PartSelector = "1"
loRest.AddHeader("Content-Type","application/json; charset=UTF-8")

loJson = CreateObject('Chilkat.JsonObject')
loJson.EmitCompact = 0

loJson.UpdateString("name","helloWorld.txt")
loJson.UpdateString("description","A simple text file that says Hello World.")
loJson.UpdateString("mimeType","text/plain")
* Specifiy the application-specific data folder.
loJson.UpdateString("parents[0]","appDataFolder")
loRest.SetMultipartBodyString(loJson.Emit())

? loJson.Emit()

* The JSON looks like this:
* {
*   "name": "helloWorld.txt",
*   "description": "A simple text file that says Hello World.",
*   "mimeType": "text/plain",
*   "parents": [
*     "appDataFolder"
*   ]
* }

* The 2nd part is the file content.
* In this case, we'll upload a simple text file containing "Hello World!"
loRest.PartSelector = "2"
loRest.AddHeader("Content-Type","text/plain")

lcFileContents = "Hello World!"
loRest.SetMultipartBodyString(lcFileContents)

lcJsonResponse = loRest.FullRequestMultipart("POST","/upload/drive/v3/files?uploadType=multipart")
IF (loRest.LastMethodSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loJsonToken
    RELEASE loGAuth
    RELEASE loRest
    RELEASE loJson
    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
    ? "response JSON: " + lcJsonResponse
    RELEASE loJsonToken
    RELEASE loGAuth
    RELEASE loRest
    RELEASE loJson
    CANCEL
ENDIF

* Show the JSON response.
loJson.Load(lcJsonResponse)

* Show the full JSON response.
loJson.EmitCompact = 0
? loJson.Emit()

* A successful response looks like this:
* {
*   "kind": "drive#file",
*   "id": "0B53Q6OSTWYoldmJ0Z3ZqT2x5MFk",
*   "name": "Untitled",
*   "mimeType": "text/plain"
* }

* Get the fileId:
? "fileId: " + loJson.StringOf("id")

RELEASE loJsonToken
RELEASE loGAuth
RELEASE loRest
RELEASE loJson