Sample code for 30+ languages & platforms
Visual FoxPro

REST Read Binary Response into BinData Object (Amazon S3)

Demonstrates how to make a REST call that returns a binary response body. This example is valid for files that fit in memory. The example shows how to download a JPG from the Amazon S3 service.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loRest
LOCAL lnBTls
LOCAL lnPort
LOCAL lnBAutoReconnect
LOCAL loAuthAws
LOCAL lnResponseStatusCode
LOCAL lcErrResponse
LOCAL loBdBody

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.
lnBTls = 1
lnPort = 443
lnBAutoReconnect = 1
lnSuccess = loRest.Connect("s3.amazonaws.com",lnPort,lnBTls,lnBAutoReconnect)

* ----------------------------------------------------------------------------
* Important: For buckets created in regions outside us-east-1,
* there are three important changes that need to be made.
* See Working with S3 Buckets in Non-us-east-1 Regions for the details.
* ----------------------------------------------------------------------------

* Provide AWS credentials for the REST call.
loAuthAws = CreateObject('Chilkat.AuthAws')
loAuthAws.AccessKey = "AWS_ACCESS_KEY"
loAuthAws.SecretKey = "AWS_SECRET_KEY"
loAuthAws.ServiceName = "s3"
lnSuccess = loRest.SetAuthAws(loAuthAws)

* Set the bucket name via the HOST header.
* In this case, the bucket name is "chilkat100".
loRest.Host = "chilkat100.s3.amazonaws.com"

* Send the request to download the JPG.
lnSuccess = loRest.SendReqNoBody("GET","/starfish.jpg")
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 JPG data is coming.
* Otherwise, we'll get a string response body with an error message(or no response body).
IF (lnResponseStatusCode <> 200) THEN
    lcErrResponse = loRest.ReadRespBodyString()
    IF (loRest.LastMethodSuccess <> 1) THEN
        ? loRest.LastErrorText
    ELSE
        ? lcErrResponse
    ENDIF

    RELEASE loRest
    RELEASE loAuthAws
    CANCEL
ENDIF

loBdBody = CreateObject('Chilkat.BinData')
lnSuccess = loRest.ReadRespBd(loBdBody)
IF (lnSuccess = 0) THEN
    ? loRest.LastErrorText
    RELEASE loRest
    RELEASE loAuthAws
    RELEASE loBdBody
    CANCEL
ENDIF

* Save the contents of the response body to a file.
lnSuccess = loBdBody.WriteFile("qa_output/starfish.jpg")
IF (lnSuccess = 1) THEN
    ? "Success"
ELSE
    ? "Failed to write file."
ENDIF

RELEASE loRest
RELEASE loAuthAws
RELEASE loBdBody