Sample code for 30+ languages & platforms
Lua

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 Lua Downloads

Lua
local chilkat = require("chilkat")

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

local rest = chilkat.Rest.new()

-- Connect to the Amazon AWS REST server.
local bTls = true
local port = 443
local bAutoReconnect = true
-- The file is uploaded to the bucket named "chilkat100", which becomes part of the domain:
local success = rest:connect("chilkat100.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.
local authAws = chilkat.AuthAws.new()
authAws.access_key = "AWS_ACCESS_KEY"
authAws.secret_key = "AWS_SECRET_KEY"
authAws.service_name = "s3"

-- For AWS Signature Version 2, the following two properties need to be set:
authAws.signature_version = 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.canonicalized_resource_v2 = "/chilkat100/hamlet_play.xml"

success = rest:set_auth_aws(authAws)

-- Load a text file into memory.
local fac = chilkat.FileAccess.new()
local fileContents = fac:read_entire_text_file("qa_data/xml/hamlet.xml", "utf-8")
if not fac.last_method_success then
    print(fac.last_error_text)
    return
end

-- 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:add_header("Content-Encoding", "gzip")

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

-- Upload the file to Amazon S3.
local responseBodyStr = rest:full_request_string("PUT", "/hamlet_play.xml", fileContents)
if not rest.last_method_success then
    print(rest.last_error_text)
    return
end

-- Did we get a 200 response indicating success?
local statusCode = rest.response_status_code
if statusCode ~= 200 then
    print("Error response: " .. responseBodyStr)
    print("Status code: " .. statusCode .. ", Status text: " .. rest.response_status_text)
    return
end

print("File successfully uploaded.")