Sample code for 30+ languages & platforms
PureBasic

Download Object from Google Cloud Storage

See more Google Cloud Storage Examples

Demonstrates how to download an object from Google Cloud Storage to a file.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"

Procedure ChilkatExample()

    success.i = 0

    ; 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 
    ; scope "https://www.googleapis.com/auth/cloud-platform"

    ; In this example, Get Google Cloud Storage OAuth2 Access Token, 
    ; the service account access token was saved to a text file.  This example fetches the access token from the file..
    sbToken.i = CkStringBuilder::ckCreate()
    If sbToken.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckLoadFile(sbToken,"qa_data/tokens/googleCloudStorageAccessToken.txt","utf-8")

    ; Send a GET equivalent to this curl command.

    ; curl -X GET \
    ;     -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    ;     -o "[SAVE_TO_LOCATION]" \
    ;     "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]?alt=media"

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

    CkHttp::setCkAuthToken(http, CkStringBuilder::ckGetAsString(sbToken))

    ; Construct a URL to download an object named "starfish.jpg" from the "chilkat-ocean" bucket.
    CkHttp::ckSetUrlVar(http,"bucket_name","chilkat-ocean")
    CkHttp::ckSetUrlVar(http,"object_name","starfish.jpg")
    url.s = "https://www.googleapis.com/storage/v1/b/{$bucket_name}/o/{$object_name}?alt=media"

    ; If there is an error response, then we didn't actually download the file data,
    ; but instead we downloaded an error response..
    fileData.i = CkBinData::ckCreate()
    If fileData.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckDownloadBd(http,url,fileData)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkStringBuilder::ckDispose(sbToken)
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(fileData)
        ProcedureReturn
    EndIf

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

    responseCode.i = CkHttp::ckLastStatus(http)
    If responseCode = 401
        Debug "If invalid credentials, then it is likely the access token expired."
        Debug "Your app should automatically fetch a new access token and re-try."
    EndIf

    If responseCode <> 200
        ; Get the error response
        CkStringBuilder::ckAppendBd(sbErrorResponse,fileData,"utf-8",0,0)
        Debug "Error response code = " + Str(responseCode)
        Debug "Error:"
        Debug CkStringBuilder::ckGetAsString(sbErrorResponse)
        CkStringBuilder::ckDispose(sbToken)
        CkHttp::ckDispose(http)
        CkBinData::ckDispose(fileData)
        CkStringBuilder::ckDispose(sbErrorResponse)
        ProcedureReturn
    EndIf

    Debug "Success."

    ; Save the downloaded data to a file.
    success = CkBinData::ckWriteFile(fileData,"qa_output/starfish.jpg")


    CkStringBuilder::ckDispose(sbToken)
    CkHttp::ckDispose(http)
    CkBinData::ckDispose(fileData)
    CkStringBuilder::ckDispose(sbErrorResponse)


    ProcedureReturn
EndProcedure