Tcl
Tcl
S3 - Working with Buckets in a Region
See more Amazon S3 (new) Examples
Demonstrates how to work with S3 buckets located in a particular region.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.
# When usig the REST class to access an S3 bucket that has been created in a particular region,
# there are three important things to remember:
#
# 1) Connect to the domain that includes the region. For example, instead of connecting to
# "s3.amazonaws.com", connect to "s3.eu-central-1.amazonaws.com" if your bucket is in the EU Frankfurt region.
# See http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region for a list of S3 region domains (endpoints)
#
# 2) Set the AuthAws.Region property equal to the region, such as "eu-central-1".
#
# 3) Include the region in request's Host header.
#
# This example will upload to a bucket in the eu-central-1 region.
#
set rest [new_CkRest]
# Connect to the Amazon AWS REST server.
set bTls 1
set port 443
set bAutoReconnect 1
set success [CkRest_Connect $rest "s3.eu-central-1.amazonaws.com" $port $bTls $bAutoReconnect]
# Provide AWS credentials for the REST call.
set authAws [new_CkAuthAws]
CkAuthAws_put_AccessKey $authAws "AWS_ACCESS_KEY"
CkAuthAws_put_SecretKey $authAws "AWS_SECRET_KEY"
CkAuthAws_put_ServiceName $authAws "s3"
CkAuthAws_put_Region $authAws "eu-central-1"
set success [CkRest_SetAuthAws $rest $authAws]
# Set the bucket name via the HOST header.
# In this case, the bucket name is "chilkateufrankfurt" (which was created in the eu-central-1 region)
CkRest_put_Host $rest "chilkateufrankfurt.s3.eu-central-1.amazonaws.com"
set fileData [new_CkBinData]
set success [CkBinData_LoadFile $fileData "qa_data/jpg/starfish.jpg"]
# Upload the file to Amazon S3.
set responseBody [new_CkStringBuilder]
set success [CkRest_FullRequestBd $rest "PUT" "/starfish.jpg" $fileData $responseBody]
if {$success != 1} then {
puts [CkRest_lastErrorText $rest]
delete_CkRest $rest
delete_CkAuthAws $authAws
delete_CkBinData $fileData
delete_CkStringBuilder $responseBody
exit
}
# Did we get a 200 response indicating success?
set statusCode [CkRest_get_ResponseStatusCode $rest]
if {$statusCode != 200} then {
puts "Error response: [CkStringBuilder_getAsString $responseBody]"
puts "Status code: $statusCode, Status text: [CkRest_responseStatusText $rest]"
delete_CkRest $rest
delete_CkAuthAws $authAws
delete_CkBinData $fileData
delete_CkStringBuilder $responseBody
exit
}
puts "File successfully uploaded."
delete_CkRest $rest
delete_CkAuthAws $authAws
delete_CkBinData $fileData
delete_CkStringBuilder $responseBody