Tcl
Tcl
Use an Azure Service SAS
See more Azure Cloud Storage Examples
Shows how to use an Azure Service SAS. (In this case, it is an SAS for a blob.)Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# Azure Blob Service Example: Upload binary bytes to a block blob.
# This uses a Service SAS for Authorization.
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set rest [new_CkRest]
# Connect to the Azure Storage Blob Service
set bTls 1
set port 443
set bAutoReconnect 1
# In this example, the storage account name is "chilkat".
set success [CkRest_Connect $rest "chilkat.blob.core.windows.net" $port $bTls $bAutoReconnect]
if {$success != 1} then {
puts [CkRest_lastErrorText $rest]
delete_CkRest $rest
exit
}
# ----------------------------------------------------------------------------------------------
# The code above this comment could be placed inside a function/subroutine within the application
# because the connection does not need to be made for every request. Once the connection is made
# the app may send many requests..
# ----------------------------------------------------------------------------------------------
# Note: The application does not need to explicitly set the following
# headers: Content-Length, x-ms-date, Authorization. These headers
# are automatically set by Chilkat.
# Let's load a previously computed Azure Storage Account SAS token and use it.
# See How to Create an Azure Service SAS
set sbToken [new_CkStringBuilder]
set success [CkStringBuilder_LoadFile $sbToken "qa_data/tokens/azureStorageServiceSas.txt" "utf-8"]
if {$success != 1} then {
puts "Failed to load SAS token."
delete_CkRest $rest
delete_CkStringBuilder $sbToken
exit
}
# Add the Shared Access Signature query params for authorization.
CkRest_AddQueryParams $rest [CkStringBuilder_getAsString $sbToken]
# IMPORTANT: Make sure to set the x-ms-blob-type header:
set success [CkRest_AddHeader $rest "x-ms-blob-type" "BlockBlob"]
# IMPORTANT: Make sure to add the x-ms-date header.
# When the header name is "x-ms-date", Chilkat will recognize the keyword "NOW"
# and will substitute the current system date/time formatted as required by Microsoft.
set success [CkRest_AddHeader $rest "x-ms-date" "NOW"]
# For this example, we'll just load a JPG file into memory..
set binData [new_CkBinData]
set success [CkBinData_LoadFile $binData "qa_data/jpg/starfish.jpg"]
if {$success != 1} then {
puts "Failed to load JPG file."
delete_CkRest $rest
delete_CkStringBuilder $sbToken
delete_CkBinData $binData
exit
}
# Note: The maximum size of a block blob created by uploading in a single step is 64MB.
# For larger files, the upload must be broken up into blocks. There is another Chilkat example for that..
set sbResponse [new_CkStringBuilder]
set success [CkRest_FullRequestBd $rest "PUT" "/mycontainer/starfish.jpg" $binData $sbResponse]
if {$success != 1} then {
puts [CkRest_lastErrorText $rest]
delete_CkRest $rest
delete_CkStringBuilder $sbToken
delete_CkBinData $binData
delete_CkStringBuilder $sbResponse
exit
}
# When successful, the Azure Storage service will respond with a 201 response status code,
# with no response body.
if {[CkRest_get_ResponseStatusCode $rest] != 201} then {
# Examine the request/response to see what happened.
puts "response status code = [CkRest_get_ResponseStatusCode $rest]"
puts "response status text = [CkRest_responseStatusText $rest]"
puts "response header: [CkRest_responseHeader $rest]"
puts "response body (if any): [CkStringBuilder_getAsString $sbResponse]"
puts "---"
puts "LastRequestStartLine: [CkRest_lastRequestStartLine $rest]"
puts "LastRequestHeader: [CkRest_lastRequestHeader $rest]"
puts "Failed."
delete_CkRest $rest
delete_CkStringBuilder $sbToken
delete_CkBinData $binData
delete_CkStringBuilder $sbResponse
exit
}
puts "Success."
delete_CkRest $rest
delete_CkStringBuilder $sbToken
delete_CkBinData $binData
delete_CkStringBuilder $sbResponse