Sample code for 30+ languages & platforms
Tcl

S3 Upload with Transfer Acceleration

See more Amazon S3 Examples

Demonstrates how to upload from a pre-signed URL with transfer acceleration.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

set http [new_CkHttp]

CkHttp_put_AwsAccessKey $http "AWS_ACCESS_KEY"
CkHttp_put_AwsSecretKey $http "AWS_SECRET_KEY"

# Make sure to set your AWS region correctly
CkHttp_put_AwsRegion $http "us-east-1"
set bucketName "chilkat200"
set objectName "starfish/starfish.jpg"
set awsService "s3"
set httpVerb "PUT"

# To use S3 acceleration, we simply set the AwsEndpoint to "s3-accelerate.amazonaws.com".
# Note: You must enable transfer acceleration on your bucket.  Acceleration incurs a higher cost.
CkHttp_put_AwsEndpoint $http "s3-accelerate.amazonaws.com"

# The signed URL will be valid for this number of seconds:
set numSecondsValid 86400

# Choose between a URL beginning with "http://" or "https://"...
set bUseHttps 1

# Generate the pre-signed URL that will use s3-accelerate.amazonaws.com
set preSignedUrl [CkHttp_s3_GenPresignedUrl $http $httpVerb $bUseHttps $bucketName $objectName $numSecondsValid $awsService]
if {[CkHttp_get_LastMethodSuccess $http] == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    exit
}

# The following URL can be copy-and-pasted into a browser..
puts "Presigned URL for Upload: $preSignedUrl"

# Here's an example of a pre-signed URL
# 
# http://chilkat200.s3-accelerate.amazonaws.com/starfish/starfish.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIBJLOVZVXAU2AFUA%2F20200623%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200623T234049Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=xxxxxeaea071178d772856c0a4e4c0114a8d9992f0d0812955e490d0exxxxxxx
# 

# Upload a local file using the pre-signed URL.
# (Chilkat provides other methods to upload file data directly from binary or text data in memory.)
set resp [new_CkHttpResponse]

set success [CkHttp_HttpFile $http "PUT" $preSignedUrl "qa_data/jpg/starfish.jpg" "image/jpg" $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkHttpResponse $resp
    exit
}

puts "response status code = [CkHttpResponse_get_StatusCode $resp]"
puts "response body size: [CkHttpResponse_get_ContentLength $resp]"
if {[CkHttpResponse_get_ContentLength $resp] > 0} then {
    puts "response body:"
    puts [CkHttpResponse_bodyStr $resp]
}


delete_CkHttp $http
delete_CkHttpResponse $resp