Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 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.
set jsonToken [new_CkJsonObject]
set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/googlePhotos.json"]
if {$success == 0} then {
puts [CkJsonObject_lastErrorText $jsonToken]
delete_CkJsonObject $jsonToken
exit
}
set http [new_CkHttp]
CkHttp_put_AuthToken $http [CkJsonObject_stringOf $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_SetRequestHeader $http "X-Goog-Upload-File-Name" "penguins.jpg"
CkHttp_SetRequestHeader $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.
set bdMedia [new_CkBinData]
set success [CkBinData_LoadFile $bdMedia "qa_data/jpg/penguins.jpg"]
set url "https://photoslibrary.googleapis.com/v1/uploads"
set resp [new_CkHttpResponse]
set success [CkHttp_HttpBd $http "POST" $url $bdMedia "application/octet-stream" $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkJsonObject $jsonToken
delete_CkHttp $http
delete_CkBinData $bdMedia
delete_CkHttpResponse $resp
exit
}
# Examine the response status code. Success is indicated by a status code of 200.
puts "response status code: [CkHttpResponse_get_StatusCode $resp]"
# Show the response body.
if {[CkHttpResponse_get_StatusCode $resp] == 200} then {
# Success.
puts "Upload token: [CkHttpResponse_bodyStr $resp]"
} else {
puts "Error:"
puts [CkHttpResponse_bodyStr $resp]
}
# Clear headers such as X-Goog-Upload-File-Name for subsequent HTTP requests sent on this object..
CkHttp_ClearHeaders $http
delete_CkJsonObject $jsonToken
delete_CkHttp $http
delete_CkBinData $bdMedia
delete_CkHttpResponse $resp