Sample code for 30+ languages & platforms
Lianja

Streaming Download Large File to the Local Filesystem

See more Azure Cloud Storage Examples

Downloads a large file in a streaming fashion to the local filesystem.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

// Azure File Service Example: Downloads a large file to the local filesystem using a Chilkat stream.
// See:  https://docs.microsoft.com/en-us/rest/api/storageservices/get-file

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

loRest = createobject("CkRest")

// Connect to the Azure Storage Blob Service
llBTls = .T.
lnPort = 443
llBAutoReconnect = .T.
// In this example, the storage account name is "chilkat".
llSuccess = loRest.Connect("chilkat.file.core.windows.net",lnPort,llBTls,llBAutoReconnect)
if (llSuccess <> .T.) then
    ? loRest.LastErrorText
    release loRest
    return
endif

// Provide Azure Cloud credentials for the REST calls.
loAzAuth = createobject("CkAuthAzureStorage")
loAzAuth.AccessKey = "AZURE_ACCESS_KEY"
// The account name used here should match the 1st part of the domain passed in the call to Connect (above).
loAzAuth.Account = "chilkat"
loAzAuth.Scheme = "SharedKey"
loAzAuth.Service = "File"
// This causes the "x-ms-version: 2021-08-06" header to be automatically added.
loAzAuth.XMsVersion = "2021-08-06"
llSuccess = loRest.SetAuthAzureStorage(loAzAuth)

// Note: The application does not need to explicitly set the following
// headers: x-ms-date, Authorization.  These headers
// are automatically set by Chilkat.

// When streaming a download to the local filesystem or directed elsewhere,
// the complete HTTP GET operation must be broken into parts.
// For example, an HTTP GET consists of sending the request, followed by reading the response header,
// and then finally the response body.  We'll want to read the response header, and then based
// on the information received (such as success or failure), either read the response body
// as an error message, or as the file data.

// Send the HTTP GET request to download the file.
// The share is named "pip".
llSuccess = loRest.SendReqNoBody("GET","/pip/somethingBig.zip")
if (llSuccess <> .T.) then
    ? loRest.LastErrorText
    release loRest
    release loAzAuth
    return
endif

// Read the response header.
lnResponseStatusCode = loRest.ReadResponseHeader()
if (lnResponseStatusCode < 0) then
    ? loRest.LastErrorText
    release loRest
    release loAzAuth
    return
endif

? "Response status code = " + str(lnResponseStatusCode)

// We expect a 200 response status if the file data is coming.
// Otherwise, we'll get a string response body with an error message(or no response body).
if (lnResponseStatusCode = 200) then

    loBodyStream = createobject("CkStream")

    // The stream's sink will be a file.
    loBodyStream.SinkFile = "qa_output/somethingBig.zip"

    // Read the response body to the stream.  Given that we've
    // set the stream's sink to a file, it will stream directly
    // to the file.
    llSuccess = loRest.ReadRespBodyStream(loBodyStream,.T.)
    if (llSuccess <> .T.) then
        ? loRest.LastErrorText
        release loRest
        release loAzAuth
        release loBodyStream
        return
    endif

    ? "Successfully received the large file."

else
    lcErrResponse = loRest.ReadRespBodyString()
    if (loRest.LastMethodSuccess <> .T.) then
        ? loRest.LastErrorText
    else
        ? lcErrResponse
    endif

endif



release loRest
release loAzAuth
release loBodyStream