PureBasic
PureBasic
Upload Media for Google Photos
See more Google Photos Examples
Demonstrates how to upload a media file (such as a JPG image) that will be placed in a Google Photos album. Uploading is a two-step process:
- Upload the raw bytes to a Google Server. This doesn't result in any media items being created in the user’s Google Photos account. Instead, it returns an upload token which identifies the uploaded bytes.
- Use the upload token to create the media item in the user’s Google Photos account. You can choose whether the media should be also added to a specific album.
This example shows step 1.
Chilkat PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpResponse.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; Get the previously obtained access token.
; See Get Google Photos Access Token.
jsonToken.i = CkJsonObject::ckCreate()
If jsonToken.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/googlePhotos.json")
If success = 0
Debug CkJsonObject::ckLastErrorText(jsonToken)
CkJsonObject::ckDispose(jsonToken)
ProcedureReturn
EndIf
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttp::setCkAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"access_token"))
; This is the HTTPS POST we'll be sending:
; POST https://photoslibrary.googleapis.com/v1/uploads
; Authorization: Bearer OAUTH2_TOKEN
; Content-type: application/octet-stream
; X-Goog-Upload-File-Name: FILENAME
; X-Goog-Upload-Protocol: raw
CkHttp::ckSetRequestHeader(http,"X-Goog-Upload-File-Name","penguins.jpg")
CkHttp::ckSetRequestHeader(http,"X-Goog-Upload-Protocol","raw")
; Assuming the media isn't super large, we'll just read it into memory and send.
; (Another example exists for streaming a large media file directly from the filesystem.)
; Load the media file into memory.
bdMedia.i = CkBinData::ckCreate()
If bdMedia.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(bdMedia,"qa_data/jpg/penguins.jpg")
url.s = "https://photoslibrary.googleapis.com/v1/uploads"
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpBd(http,"POST",url,bdMedia,"application/octet-stream",resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkJsonObject::ckDispose(jsonToken)
CkHttp::ckDispose(http)
CkBinData::ckDispose(bdMedia)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
; Examine the response status code. Success is indicated by a status code of 200.
Debug "response status code: " + Str(CkHttpResponse::ckStatusCode(resp))
; Show the response body.
If CkHttpResponse::ckStatusCode(resp) = 200
; Success.
Debug "Upload token: " + CkHttpResponse::ckBodyStr(resp)
Else
Debug "Error:"
Debug CkHttpResponse::ckBodyStr(resp)
EndIf
; Clear headers such as X-Goog-Upload-File-Name for subsequent HTTP requests sent on this object..
CkHttp::ckClearHeaders(http)
CkJsonObject::ckDispose(jsonToken)
CkHttp::ckDispose(http)
CkBinData::ckDispose(bdMedia)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndProcedure