Sample code for 30+ languages & platforms
Swift

S3 Upload String using AWS Signature Version 2

See more Amazon S3 (new) Examples

Example to upload the contents of a string to the Amazon S3 service, using the older AWS Signature Version 2.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    // Demonstrates how to use older AWS S3 Signature Version 2 for uploading the contents
    // of a string variable to an object in a bucket.

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

    let rest = CkoRest()!

    // Connect to the Amazon AWS REST server.
    var bTls: Bool = true
    var port: Int = 443
    var bAutoReconnect: Bool = true
    // The file is uploaded to the bucket named "chilkat100", which becomes part of the domain:
    success = rest.connect(hostname: "chilkat100.s3.amazonaws.com", port: port, tls: bTls, autoReconnect: 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.
    let authAws = CkoAuthAws()!
    authAws.accessKey = "AWS_ACCESS_KEY"
    authAws.secretKey = "AWS_SECRET_KEY"
    authAws.serviceName = "s3"

    // For AWS Signature Version 2, the following two properties need to be set:
    authAws.signatureVersion = 2
    // See http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#ConstructingTheCanonicalizedResourceElement
    // The bucket is "chilkat100", and the uriPath is "/hamlet_play.xml", which must match
    // the URI path passed to the FullRequestString method below.
    authAws.canonicalizedResourceV2 = "/chilkat100/hamlet_play.xml"

    success = rest.setAuthAws(authProvider: authAws)

    // Load a text file into memory.
    let fac = CkoFileAccess()!
    var fileContents: String? = fac.readEntireTextFile(path: "qa_data/xml/hamlet.xml", charset: "utf-8")
    if fac.lastMethodSuccess != true {
        print("\(fac.lastErrorText!)")
        return
    }

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

    // Indicate the Content-Type of our upload.  (This is optional)
    success = rest.addHeader(name: "Content-Type", value: "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 = rest.addHeader(name: "Expect", value: "100-continue")

    // Upload the file to Amazon S3.
    var responseBodyStr: String? = rest.fullRequestString(httpVerb: "PUT", uriPath: "/hamlet_play.xml", bodyText: fileContents)
    if rest.lastMethodSuccess != true {
        print("\(rest.lastErrorText!)")
        return
    }

    // Did we get a 200 response indicating success?
    var statusCode: Int = rest.responseStatusCode.intValue
    if statusCode != 200 {
        print("Error response: \(responseBodyStr!)")
        print("Status code: \(statusCode), Status text: \(rest.responseStatusText!)")
        return
    }

    print("File successfully uploaded.")

}