Sample code for 30+ languages & platforms
DataFlex

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 DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoRest
    Boolean iBTls
    Integer iPort
    Boolean iBAutoReconnect
    Handle hoSbToken
    Variant vBinData
    Handle hoBinData
    Variant vSbResponse
    Handle hoSbResponse
    String sTemp1
    Integer iTemp1

    Move False To iSuccess

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

    Get Create (RefClass(cComChilkatRest)) To hoRest
    If (Not(IsComObjectCreated(hoRest))) Begin
        Send CreateComObject of hoRest
    End

    // Connect to the Azure Storage Blob Service
    Move True To iBTls
    Move 443 To iPort
    Move True To iBAutoReconnect
    // In this example, the storage account name is "chilkat".
    Get ComConnect Of hoRest "chilkat.blob.core.windows.net" iPort iBTls iBAutoReconnect To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoRest To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // ----------------------------------------------------------------------------------------------
    // 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
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbToken
    If (Not(IsComObjectCreated(hoSbToken))) Begin
        Send CreateComObject of hoSbToken
    End
    Get ComLoadFile Of hoSbToken "qa_data/tokens/azureStorageServiceSas.txt" "utf-8" To iSuccess
    If (iSuccess <> True) Begin
        Showln "Failed to load SAS token."
        Procedure_Return
    End

    // Add the Shared Access Signature query params for authorization.
    Get ComGetAsString Of hoSbToken To sTemp1
    Get ComAddQueryParams Of hoRest sTemp1 To iSuccess

    // IMPORTANT: Make sure to set the x-ms-blob-type header:
    Get ComAddHeader Of hoRest "x-ms-blob-type" "BlockBlob" To iSuccess

    // 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.
    Get ComAddHeader Of hoRest "x-ms-date" "NOW" To iSuccess

    // For this example, we'll just load a JPG file into memory..
    Get Create (RefClass(cComChilkatBinData)) To hoBinData
    If (Not(IsComObjectCreated(hoBinData))) Begin
        Send CreateComObject of hoBinData
    End
    Get ComLoadFile Of hoBinData "qa_data/jpg/starfish.jpg" To iSuccess
    If (iSuccess <> True) Begin
        Showln "Failed to load JPG file."
        Procedure_Return
    End

    // 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..
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponse
    If (Not(IsComObjectCreated(hoSbResponse))) Begin
        Send CreateComObject of hoSbResponse
    End
    Get pvComObject of hoBinData to vBinData
    Get pvComObject of hoSbResponse to vSbResponse
    Get ComFullRequestBd Of hoRest "PUT" "/mycontainer/starfish.jpg" vBinData vSbResponse To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoRest To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // When successful, the Azure Storage service will respond with a 201 response status code,
    // with no response body.
    Get ComResponseStatusCode Of hoRest To iTemp1
    If (iTemp1 <> 201) Begin
        // Examine the request/response to see what happened.
        Get ComResponseStatusCode Of hoRest To iTemp1
        Showln "response status code = " iTemp1
        Get ComResponseStatusText Of hoRest To sTemp1
        Showln "response status text = " sTemp1
        Get ComResponseHeader Of hoRest To sTemp1
        Showln "response header: " sTemp1
        Get ComGetAsString Of hoSbResponse To sTemp1
        Showln "response body (if any): " sTemp1
        Showln "---"
        Get ComLastRequestStartLine Of hoRest To sTemp1
        Showln "LastRequestStartLine: " sTemp1
        Get ComLastRequestHeader Of hoRest To sTemp1
        Showln "LastRequestHeader: " sTemp1
        Showln "Failed."
        Procedure_Return
    End

    Showln "Success."


End_Procedure