PureBasic
PureBasic
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 PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
Procedure ChilkatExample()
success.i = 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.
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Connect to the Azure Storage Blob Service
bTls.i = 1
port.i = 443
bAutoReconnect.i = 1
; In this example, the storage account name is "chilkat".
success = CkRest::ckConnect(rest,"chilkat.blob.core.windows.net",port,bTls,bAutoReconnect)
If success <> 1
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
ProcedureReturn
EndIf
; ----------------------------------------------------------------------------------------------
; 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
sbToken.i = CkStringBuilder::ckCreate()
If sbToken.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkStringBuilder::ckLoadFile(sbToken,"qa_data/tokens/azureStorageServiceSas.txt","utf-8")
If success <> 1
Debug "Failed to load SAS token."
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbToken)
ProcedureReturn
EndIf
; Add the Shared Access Signature query params for authorization.
CkRest::ckAddQueryParams(rest,CkStringBuilder::ckGetAsString(sbToken))
; IMPORTANT: Make sure to set the x-ms-blob-type header:
success = CkRest::ckAddHeader(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.
success = CkRest::ckAddHeader(rest,"x-ms-date","NOW")
; For this example, we'll just load a JPG file into memory..
binData.i = CkBinData::ckCreate()
If binData.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(binData,"qa_data/jpg/starfish.jpg")
If success <> 1
Debug "Failed to load JPG file."
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbToken)
CkBinData::ckDispose(binData)
ProcedureReturn
EndIf
; 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..
sbResponse.i = CkStringBuilder::ckCreate()
If sbResponse.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRest::ckFullRequestBd(rest,"PUT","/mycontainer/starfish.jpg",binData,sbResponse)
If success <> 1
Debug CkRest::ckLastErrorText(rest)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbToken)
CkBinData::ckDispose(binData)
CkStringBuilder::ckDispose(sbResponse)
ProcedureReturn
EndIf
; When successful, the Azure Storage service will respond with a 201 response status code,
; with no response body.
If CkRest::ckResponseStatusCode(rest) <> 201
; Examine the request/response to see what happened.
Debug "response status code = " + Str(CkRest::ckResponseStatusCode(rest))
Debug "response status text = " + CkRest::ckResponseStatusText(rest)
Debug "response header: " + CkRest::ckResponseHeader(rest)
Debug "response body (if any): " + CkStringBuilder::ckGetAsString(sbResponse)
Debug "---"
Debug "LastRequestStartLine: " + CkRest::ckLastRequestStartLine(rest)
Debug "LastRequestHeader: " + CkRest::ckLastRequestHeader(rest)
Debug "Failed."
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbToken)
CkBinData::ckDispose(binData)
CkStringBuilder::ckDispose(sbResponse)
ProcedureReturn
EndIf
Debug "Success."
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbToken)
CkBinData::ckDispose(binData)
CkStringBuilder::ckDispose(sbResponse)
ProcedureReturn
EndProcedure