Sample code for 30+ languages & platforms
PureBasic

Google Drive Multipart Upload String

See more REST Examples

Demonstrates a file upload to Google Drive where the contents of the file are contained in a string variable.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkAuthGoogle.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example will upload a file to Google Drive.
    success = 1

    ; It requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    gAuth.i = CkAuthGoogle::ckCreate()
    If gAuth.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthGoogle::setCkScope(gAuth, "https://www.googleapis.com/auth/drive")
    CkAuthGoogle::setCkSubEmailAddress(gAuth, "some.user@example.com")
    CkAuthGoogle::setCkExpireNumSeconds(gAuth, 3600)

    ; Obtain an access token as shown in one of the following examples:
    ; See Get Access Token using a Service Account JSON Key
    ; See Get Access Token using a P12 File

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Connect using TLS.
    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,"www.googleapis.com",443,1,bAutoReconnect)

    ; Provide the authentication credentials (i.e. the access key)
    success = CkRest::ckSetAuthGoogle(rest,gAuth)

    ; A multipart upload to Google Drive needs a multipart/related Content-Type
    success = CkRest::ckAddHeader(rest,"Content-Type","multipart/related")

    ; Specify each part of the request.

    ; The 1st part is JSON with information about the file.
    CkRest::setCkPartSelector(rest, "1")
    success = CkRest::ckAddHeader(rest,"Content-Type","application/json; charset=UTF-8")

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckAddStringAt(json,-1,"title","helloWorld.txt")
    success = CkJsonObject::ckAddStringAt(json,-1,"description","A simple text file that says Hello World.")
    success = CkJsonObject::ckAddStringAt(json,-1,"mimeType","text/plain")
    success = CkRest::ckSetMultipartBodyString(rest,CkJsonObject::ckEmit(json))

    ; The 2nd part is the file content.
    ; In this case, we'll upload a simple text file containing "Hello World!"
    CkRest::setCkPartSelector(rest, "2")
    success = CkRest::ckAddHeader(rest,"Content-Type","text/plain")
    success = CkRest::ckSetMultipartBodyString(rest,"Hello World!")

    ; POST https://www.googleapis.com/upload/drive/v2/files
    jsonResponse.s = CkRest::ckFullRequestMultipart(rest,"POST","/upload/drive/v2/files?uploadType=multipart")
    If CkRest::ckLastMethodSuccess(rest) <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkAuthGoogle::ckDispose(gAuth)
        CkRest::ckDispose(rest)
        CkJsonObject::ckDispose(json)
        ProcedureReturn
    EndIf

    ; Show the JSON response.
    Debug "Response Status Code: " + Str(CkRest::ckResponseStatusCode(rest))
    Debug "Json Response: " + jsonResponse


    CkAuthGoogle::ckDispose(gAuth)
    CkRest::ckDispose(rest)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure