PureBasic
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
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