Sample code for 30+ languages & platforms
PureBasic

Upload using Azure Storage Account Shared Access Signature (SAS) Authorization

See more Azure Cloud Storage Examples

Sample code to upload binary bytes to a block blob in Azure Cloud Storage using an Azure Storage Account Shared Access Signature (SAS) Authorization. This creates a block blob, or replaces an existing block blob.

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..

Note: This example requires Chilkat v9.5.0.65 or later.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"

Procedure ChilkatExample()

    success.i = 0

    ; Note: This example requires Chilkat v9.5.0.65 or greater.

    ; Azure Blob Service Example: Upload binary bytes to a block blob.
    ; This uses a Shared Access Signature (SAS) for Authorization.
    ; This creates a new block blob or replaces an existing one in its entirety.
    ; See also: https://msdn.microsoft.com/en-us/library/azure/dd179451.aspx

    ; 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 Storage Account Shared Access Signature
    sbToken.i = CkStringBuilder::ckCreate()
    If sbToken.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkStringBuilder::ckLoadFile(sbToken,"qa_data/tokens/azureStorageAccountSas.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