Sample code for 30+ languages & platforms
PureBasic

S3 Upload Binary File from BinData

See more Amazon S3 (new) Examples

Upload a binary file contained in a BinData object to Amazon S3.

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.

    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
    ; Make sure to connect to the region where the bucket is located..
    success = CkRest::ckConnect(rest,"s3-us-west-2.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")
    ; Use the correct region..
    CkAuthAws::setCkRegion(authAws, "us-west-2")
    CkAuthAws::setCkServiceName(authAws, "s3")

    success = CkRest::ckSetAuthAws(rest,authAws)

    ; Set the bucket name via the HOST header.
    ; In this case, the bucket name is "chilkat.qa".
    ; (Also make sure to use the correct region.)
    CkRest::setCkHost(rest, "chilkat.qa.s3-us-west-2.amazonaws.com")

    ; Load a text file into memory.
    pngData.i = CkBinData::ckCreate()
    If pngData.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkBinData::ckLoadFile(pngData,"qa_data/png/anemone.png")
    If success <> 1
        Debug "Failed to load file from local filesystem."
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkBinData::ckDispose(pngData)
        ProcedureReturn
    EndIf

    ; Indicate the Content-Type of our upload.  (This is optional)
    CkRest::ckAddHeader(rest,"Content-Type","image/png")

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

    success = CkRest::ckFullRequestBd(rest,"PUT","/images/sea_creatures/anemone.png",pngData,sbResponse)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkBinData::ckDispose(pngData)
        CkStringBuilder::ckDispose(sbResponse)
        ProcedureReturn
    EndIf

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

    Debug "File successfully uploaded."


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkBinData::ckDispose(pngData)
    CkStringBuilder::ckDispose(sbResponse)


    ProcedureReturn
EndProcedure