Sample code for 30+ languages & platforms
Visual FoxPro

Create S3 Pre-Signed URL for Upload

See more Amazon S3 Examples

Demonstrates how to generate a pre-signed URL for S3 uploads.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL lcBucketName
LOCAL lcObjectName
LOCAL lcAwsService
LOCAL lcHttpVerb
LOCAL lnNumSecondsValid
LOCAL lnBUseHttps
LOCAL lcPreSignedUrl
LOCAL loResp

lnSuccess = 0

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

loHttp = CreateObject('Chilkat.Http')

loHttp.AwsAccessKey = "AWS_ACCESS_KEY"
loHttp.AwsSecretKey = "AWS_SECRET_KEY"

* Make sure to set your AWS region correctly
loHttp.AwsRegion = "us-east-1"

lcBucketName = "chilkat200"
lcObjectName = "starfish/starfish.jpg"
lcAwsService = "s3"
lcHttpVerb = "PUT"

* The signed URL will be valid for this number of seconds:
lnNumSecondsValid = 86400

* Choose between a URL beginning with "http://" or "https://"...
lnBUseHttps = 1

* Generate the pre-signed URL
lcPreSignedUrl = loHttp.S3_GenPresignedUrl(lcHttpVerb,lnBUseHttps,lcBucketName,lcObjectName,lnNumSecondsValid,lcAwsService)
IF (loHttp.LastMethodSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    CANCEL
ENDIF

? "Presigned URL for Upload: " + lcPreSignedUrl

* Here's an example of a pre-signed URL
* 
* http://chilkat200.s3.amazonaws.com/starfish/starfish.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIBJLOVZVXAU2AFUA%2F20200623%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200623T234049Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=xxxxxeaea071178d772856c0a4e4c0114a8d9992f0d0812955e490d0exxxxxxx
* 

* You can use the pre-signed URL to upload from Chilkat
* For example, upload by streaming from a local file
loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpFile("PUT",lcPreSignedUrl,"qa_data/jpg/starfish.jpg","image/jpg",loResp)
IF (lnSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RELEASE loResp
    CANCEL
ENDIF

? "response status code = " + STR(loResp.StatusCode)
? "response body size: " + STR(loResp.ContentLength)
IF (loResp.ContentLength > 0) THEN
    ? "response body:"
    ? loResp.BodyStr
ENDIF

RELEASE loHttp
RELEASE loResp