Lua
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
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.")