Sample code for 30+ languages & platforms
Visual FoxPro

REST Stream Response to File (Streaming Download) (Amazon S3)

See more Amazon S3 (new) Examples

Demonstrates how to stream the response body directly to a file. (The example shows how to stream 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 loBodyStream
LOCAL lcErrResponse

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

    loBodyStream = CreateObject('Chilkat.Stream')

    * The stream's sink will be a file.
    loBodyStream.SinkFile = "qa_output/starfish.jpg"

    * 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 loAuthAws
        RELEASE loBodyStream
        CANCEL
    ENDIF

    ? "Successfully received the JPG file."

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

ENDIF

RELEASE loRest
RELEASE loAuthAws
RELEASE loBodyStream