Sample code for 30+ languages & platforms
PureBasic

Create S3 Bucket in a Region

See more Amazon S3 Examples

Demonstrates how to create an S3 bucket in a specified region. This example will create a bucket in the eu-west-2 region.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkXml.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.

    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.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")
    success = CkRest::ckSetAuthAws(rest,authAws)

    ; We'll send a PUT request having an XML body such as this:
    ; <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    ;   <LocationConstraint>BucketRegion</LocationConstraint> 
    ;   </CreateBucketConfiguration>

    ; Create the XML body specifying the region as "eu-west-2"
    bucketRegion.s = "eu-west-2"
    sbBucketRegion.i = CkStringBuilder::ckCreate()
    If sbBucketRegion.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringBuilder::ckAppend(sbBucketRegion,bucketRegion)

    ; We only need to specify the LocationConstraint if the bucket's region is NOT us-east-1
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    If Not CkStringBuilder::ckContentsEqual(sbBucketRegion,"us-east-1")
        CkXml::setCkTag(xml, "CreateBucketConfiguration")
        CkXml::ckAddAttribute(xml,"xmlns","http://s3.amazonaws.com/doc/2006-03-01/")
        CkXml::ckUpdateChildContent(xml,"LocationConstraint","eu-west-2")
    EndIf

    ; --------------------------------------------------------------
    ; IMPORTANT: To create a bucket in the default us-east-1 region,
    ; do not add the LocationConstraint.  Adding a LocationConstraint of "us-east-1"
    ; causes an error "The specified location-constraint is not valid."
    ; By default, the bucket is created in us-east-1 by sending a PUT with an empty body.
    ; --------------------------------------------------------------

    ; Set the bucket name via the HOST header.
    ; In this case, the bucket name is "chilkateuwest2".
    CkRest::setCkHost(rest, "chilkateuwest2.s3.amazonaws.com")

    ; Make the call to create the bucket.
    responseStr.s
    If Not CkStringBuilder::ckContentsEqual(sbBucketRegion,"us-east-1")
        responseStr = CkRest::ckFullRequestString(rest,"PUT","/",CkXml::ckGetXml(xml))
    Else
        ; If the bucket is to be created in the us-east-1 region (the default region)
        ; just send a PUT with no body.
        responseStr = CkRest::ckFullRequestNoBody(rest,"PUT","/")
    EndIf

    If CkRest::ckLastMethodSuccess(rest) <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbBucketRegion)
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    If CkRest::ckResponseStatusCode(rest) <> 200
        Debug "status code = " + Str(CkRest::ckResponseStatusCode(rest))
        responseXml.i = CkXml::ckCreate()
        If responseXml.i = 0
            Debug "Failed to create object."
            ProcedureReturn
        EndIf

        CkXml::ckLoadXml(responseXml,responseStr)
        Debug CkXml::ckGetXml(responseXml)
        Debug "Failed."
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkStringBuilder::ckDispose(sbBucketRegion)
        CkXml::ckDispose(xml)
        CkXml::ckDispose(responseXml)
        ProcedureReturn
    EndIf

    Debug "Bucket in the eu-west-2 region created."


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkStringBuilder::ckDispose(sbBucketRegion)
    CkXml::ckDispose(xml)
    CkXml::ckDispose(responseXml)


    ProcedureReturn
EndProcedure