Sample code for 30+ languages & platforms
PureBasic

REST Upload String

See more Amazon S3 (new) Examples

Example to upload the contents of a string to the Amazon S3 service.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkAuthAws.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkFileAccess.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)

    ; ----------------------------------------------------------------------------
    ; 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.
    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)

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

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

    fileContents.s = CkFileAccess::ckReadEntireTextFile(fac,"qa_data/xml/hamlet.xml","utf-8")
    If CkFileAccess::ckLastMethodSuccess(fac) <> 1
        Debug CkFileAccess::ckLastErrorText(fac)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkFileAccess::ckDispose(fac)
        ProcedureReturn
    EndIf

    ; To send the file in gzip or deflate compressed format, set the Content-Encoding request
    ; header to "gzip" or "deflate".  (this is optional)
    success = CkRest::ckAddHeader(rest,"Content-Encoding","gzip")

    ; Indicate the Content-Type of our upload.  (This is optional)
    success = CkRest::ckAddHeader(rest,"Content-Type","text/xml")

    ; We can add an "Expect: 100-continue" header so that if the request is rejected
    ; by the server immediately after receiving the request header, it can respond
    ; and the client (Chilkat) can avoid sending the file data.
    ; (this is optional)
    success = CkRest::ckAddHeader(rest,"Expect","100-continue")

    ; Upload the file to Amazon S3.
    responseBodyStr.s = CkRest::ckFullRequestString(rest,"PUT","/hamlet_play.xml",fileContents)
    If CkRest::ckLastMethodSuccess(rest) <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkFileAccess::ckDispose(fac)
        ProcedureReturn
    EndIf

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

    Debug "File successfully uploaded."


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkFileAccess::ckDispose(fac)


    ProcedureReturn
EndProcedure