Visual FoxPro
Visual FoxPro
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 Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loRest
LOCAL lnBTls
LOCAL lnPort
LOCAL lnBAutoReconnect
LOCAL loAzAuth
LOCAL lnResponseStatusCode
LOCAL loBodyStream
LOCAL lcErrResponse
lnSuccess = 0
* 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('Chilkat.Rest')
* Connect to the Azure Storage Blob Service
lnBTls = 1
lnPort = 443
lnBAutoReconnect = 1
* In this example, the storage account name is "chilkat".
lnSuccess = loRest.Connect("chilkat.file.core.windows.net",lnPort,lnBTls,lnBAutoReconnect)
IF (lnSuccess <> 1) THEN
? loRest.LastErrorText
RELEASE loRest
CANCEL
ENDIF
* Provide Azure Cloud credentials for the REST calls.
loAzAuth = CreateObject('Chilkat.AuthAzureStorage')
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"
lnSuccess = 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".
lnSuccess = loRest.SendReqNoBody("GET","/pip/somethingBig.zip")
IF (lnSuccess <> 1) THEN
? loRest.LastErrorText
RELEASE loRest
RELEASE loAzAuth
CANCEL
ENDIF
* Read the response header.
lnResponseStatusCode = loRest.ReadResponseHeader()
IF (lnResponseStatusCode < 0) THEN
? loRest.LastErrorText
RELEASE loRest
RELEASE loAzAuth
CANCEL
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('Chilkat.Stream')
* 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.
lnSuccess = loRest.ReadRespBodyStream(loBodyStream,1)
IF (lnSuccess <> 1) THEN
? loRest.LastErrorText
RELEASE loRest
RELEASE loAzAuth
RELEASE loBodyStream
CANCEL
ENDIF
? "Successfully received the large file."
ELSE
lcErrResponse = loRest.ReadRespBodyString()
IF (loRest.LastMethodSuccess <> 1) THEN
? loRest.LastErrorText
ELSE
? lcErrResponse
ENDIF
ENDIF
RELEASE loRest
RELEASE loAzAuth
RELEASE loBodyStream