Sample code for 30+ languages & platforms
Visual FoxPro

Glacier Download Archive

See more Amazon Glacier Examples

Demonstrates how to download an Amazon Glacier archive. Downloading a Glacier archive is a two step process. First an archive retrieval job is initiated. After it completes, the job output is downloaded (i.e. the archive contents are downloaded.)

Note: This example requires Chilkat v9.5.0.78 or greater.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loRest
LOCAL lnBTls
LOCAL lnPort
LOCAL lnBAutoReconnect
LOCAL loAuthAws
LOCAL lnResponseStatusCode
LOCAL loBodyStream
LOCAL lcJsonError

lnSuccess = 0

* 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 Amazon AWS REST server in the desired region.
lnBTls = 1
lnPort = 443
lnBAutoReconnect = 1
lnSuccess = loRest.Connect("glacier.us-west-2.amazonaws.com",lnPort,lnBTls,lnBAutoReconnect)

* Provide AWS credentials.
loAuthAws = CreateObject('Chilkat.AuthAws')
loAuthAws.AccessKey = "AWS_ACCESS_KEY"
loAuthAws.SecretKey = "AWS_SECRET_KEY"
loAuthAws.ServiceName = "glacier"
loAuthAws.Region = "us-west-2"

lnSuccess = loRest.SetAuthAws(loAuthAws)

* --------------------------------------------------------------------------
* Note: The above REST connection and setup of the AWS credentials
* can be done once.  After connecting, any number of REST calls can be made.
* The "auto reconnect" property passed to rest.Connect indicates that if
* the connection is lost, a REST method call will automatically reconnect
* if needed.
* --------------------------------------------------------------------------

* 
* For more information, see Glacier Retrieve Job Output Reference Documentation
* 
loRest.AddHeader("x-amz-glacier-version","2012-06-01")

* To download an archive, we'll make several method calls:
* 1) Send the HTTPS GET request.
* 2) Get the response body.
* 3) If the response status code indicates success, stream the response body (i.e the archive data) to a file.
* 4) If the response status code indicates an error, get the JSON error response.

* Send the GET request.
lnSuccess = loRest.SendReqNoBody("GET","/AWS_ACCOUNT_ID/vaults/chilkat/jobs/JOB_ID/output")
IF (lnSuccess <> 1) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    RELEASE loAuthAws
    CANCEL
ENDIF

* Read the response header.
lnResponseStatusCode = loRest.ReadResponseHeader()
IF (lnResponseStatusCode < 0) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    RELEASE loAuthAws
    CANCEL
ENDIF

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

* We expect a 200 response status if the archive data is coming.
* Otherwise, we'll get a JSON 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/archiveData.dat"

    * Read the response body to the stream.
    lnSuccess = loRest.ReadRespBodyStream(loBodyStream,1)
    IF (lnSuccess <> 1) THEN
        ? loRest.LastErrorText
        RELEASE loRest
        RELEASE loAuthAws
        RELEASE loBodyStream
        CANCEL
    ENDIF

    ? "Successfully received the archive file."

ELSE
    lcJsonError = loRest.ReadRespBodyString()
    IF (loRest.LastMethodSuccess <> 1) THEN
        ? loRest.LastErrorText
    ELSE
        ? lcJsonError
    ENDIF

ENDIF

RELEASE loRest
RELEASE loAuthAws
RELEASE loBodyStream