Sample code for 30+ languages & platforms
PureBasic

S3 - Working with Buckets in a Region

See more Amazon S3 (new) Examples

Demonstrates how to work with S3 buckets located in a particular region.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkBinData.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkAuthAws.pb"
IncludeFile "CkRest.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ; When usig the REST class to access an S3 bucket that has been created in a particular region,
    ; there are three important things to remember:
    ; 
    ; 1) Connect to the domain that includes the region.  For example, instead of connecting to
    ;    "s3.amazonaws.com", connect to "s3.eu-central-1.amazonaws.com" if your bucket is in the EU Frankfurt region.
    ;    See http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region   for a list of S3 region domains (endpoints)
    ; 
    ; 2) Set the AuthAws.Region property equal to the region, such as "eu-central-1".
    ; 
    ; 3) Include the region in request's Host header.
    ; 

    ; This example will upload to a bucket in the eu-central-1 region.
    ; 
    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Connect to the Amazon AWS REST server.
    bTls.i = 1
    port.i = 443
    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,"s3.eu-central-1.amazonaws.com",port,bTls,bAutoReconnect)

    ; Provide AWS credentials for the REST call.
    authAws.i = CkAuthAws::ckCreate()
    If authAws.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
    CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")
    CkAuthAws::setCkServiceName(authAws, "s3")
    CkAuthAws::setCkRegion(authAws, "eu-central-1")
    success = CkRest::ckSetAuthAws(rest,authAws)

    ; Set the bucket name via the HOST header.
    ; In this case, the bucket name is "chilkateufrankfurt" (which was created in the eu-central-1 region)
    CkRest::setCkHost(rest, "chilkateufrankfurt.s3.eu-central-1.amazonaws.com")

    fileData.i = CkBinData::ckCreate()
    If fileData.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkBinData::ckLoadFile(fileData,"qa_data/jpg/starfish.jpg")

    ; Upload the file to Amazon S3.
    responseBody.i = CkStringBuilder::ckCreate()
    If responseBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckFullRequestBd(rest,"PUT","/starfish.jpg",fileData,responseBody)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkBinData::ckDispose(fileData)
        CkStringBuilder::ckDispose(responseBody)
        ProcedureReturn
    EndIf

    ; Did we get a 200 response indicating success?
    statusCode.i = CkRest::ckResponseStatusCode(rest)
    If statusCode <> 200
        Debug "Error response: " + CkStringBuilder::ckGetAsString(responseBody)
        Debug "Status code: " + Str(statusCode) + ", Status text: " + CkRest::ckResponseStatusText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkBinData::ckDispose(fileData)
        CkStringBuilder::ckDispose(responseBody)
        ProcedureReturn
    EndIf

    Debug "File successfully uploaded."


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkBinData::ckDispose(fileData)
    CkStringBuilder::ckDispose(responseBody)


    ProcedureReturn
EndProcedure