Visual FoxPro
Visual FoxPro
Upload Binary File from Memory
See more Google Drive Examples
This example demonstrates how to upload a binary file from memory. It uploads the file to a subdirectory of our choosing.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loGAuth
LOCAL loRest
LOCAL lnBAutoReconnect
LOCAL loJson
LOCAL loGdCache
LOCAL lcFolderId
LOCAL loParents
LOCAL loFac
LOCAL loJpgBytes
LOCAL lcJsonResponse
lnSuccess = 0
lnSuccess = 1
* This example 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.
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")
* Construct the JSON that will contain the metadata about the file data to be uploaded...
loJson = CreateObject('Chilkat.JsonObject')
loJson.AppendString("name","hedgehogs.jpg")
loJson.AppendString("description","A cute photo of two hedgehogs.")
loJson.AppendString("mimeType","image/jpeg")
* To place the file in a folder, we must add a parents[] array to the JSON
* and add the folder 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 find the file ID for the folder "testFolder/abc/123"
loGdCache = CreateObject('Chilkat.Cache')
loGdCache.Level = 0
loGdCache.AddRoot("C:/ckCache/googleDrive")
lcFolderId = loGdCache.FetchText("testFolder/abc/123")
IF (loGdCache.LastMethodSuccess <> 1) THEN
? "Filepath not found in cache."
RELEASE loGAuth
RELEASE loRest
RELEASE loJson
RELEASE loGdCache
CANCEL
ENDIF
loParents = CreateObject('Chilkat.JsonArray')
loJson.AppendArray2("parents",loParents)
loParents.AddStringAt(-1,lcFolderId)
loRest.SetMultipartBodyString(loJson.Emit())
* The 2nd part is the file content, which will contain the binary image data.
loRest.PartSelector = "2"
loRest.AddHeader("Content-Type","image/jpeg")
loFac = CreateObject('Chilkat.FileAccess')
* Read a JPG file from the local filesystem.
loJpgBytes = loFac.ReadEntireFile("qa_data/jpg/hedgehogs.jpg")
* Add the bytes to our upload
loRest.SetMultipartBodyBinary(loJpgBytes)
lcJsonResponse = loRest.FullRequestMultipart("POST","/upload/drive/v3/files?uploadType=multipart")
IF (loRest.LastMethodSuccess = 0) THEN
? loRest.LastErrorText
RELEASE loGAuth
RELEASE loRest
RELEASE loJson
RELEASE loGdCache
RELEASE loParents
RELEASE loFac
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 loGAuth
RELEASE loRest
RELEASE loJson
RELEASE loGdCache
RELEASE loParents
RELEASE loFac
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": "hedgehogs.jpg",
* "mimeType": "image/jpeg"
* }
* Get the fileId:
? "fileId: " + loJson.StringOf("id")
RELEASE loGAuth
RELEASE loRest
RELEASE loJson
RELEASE loGdCache
RELEASE loParents
RELEASE loFac