Setup
To use the S3 Lite plugin, you will need to require it:
local s3 = require("plugin.s3-lite")
new
Create and initialize a new S3 Lite instance.
s3:new(config_tbl)
Config Table Keys
Name | Description | Type | Default | Required |
---|---|---|---|---|
key | The AWS key for the account. | String | nil | Y |
secret | The AWS secret key for the account. | String | nil | Y |
region | The region where the S3 bucket resides. | Const | s3.US_EAST_1 | N |
Usage
s3:new({ key = "aws-key-1234", secret = "aws-secret-abcd", region = s3.EU_WEST_1 })
Note
The AWS user must have the proper S3 permissions set up through the AWS IAM console.
listBuckets
List S3 buckets that are owned by the AWS user. Returns a table array with bucket names. If no buckets exist, the array will be empty.
s3:listBuckets(listener)
Parameters
Name | Description | Type | Required |
---|---|---|---|
listener | An event listener to receive the results. | Function | Y |
Response Event
On success, the response event will contain a buckets key, which is a table array of bucket names found, if any.
Usage
local function onListBuckets( evt ) if evt.error then print(evt.error, evt.message, evt.status) else local buckets = evt.buckets for i=1, #buckets do print(buckets[i]) end end end s3:listBuckets(onListBuckets)
Note
Bucket creation and deletion must be managed through the AWS S3 web console.
listObjects
List objects contained in a bucket owned by the AWS user.
s3:listObjects(bucket_name, listener[, params])
Parameters
Name | Description | Type | Required |
---|---|---|---|
bucket_name | The name of the bucket to list. | String | Y |
listener | An event listener to receive the results. | Function | Y |
Usage
local function onListObjects( evt ) if evt.error then print(evt.error, evt.message, evt.status) else local objects = evt.objects for i=1, #objects do print(objects[i].key, objects[i].size) end end end s3:listObjects("my-bucket", onListObjects)
List Objects Parameters Keys
Key | Description | Type | Default |
---|---|---|---|
maxKeys | Sets the maximum number of keys returned. | Number | 1000 |
prefix | Return keys that begin with the specified prefix. See Prefixes. | String | nil |
startAfter | Return key names after a specific object key. See Start-After below. | String | nil |
nextToken | Token to get the next set of results, if any. See Paging below. | String | nil |
Response Event
On success, the response event will have an objects key containing a table array of the objects found, if any. Each object in the array contains the following keys:
Key | Description |
---|---|
key | The key/name of the file. |
size | The file size in bytes. |
modified | The last modification timestamp. |
storage | The storage class for the file. |
Usage
local function onListObjects( evt ) if evt.error then print(evt.error, evt.message, evt.status) else local objects = evt.objects for i=1, #objects do print(objects[i].key, objects[i].size) end end end local params = { maxKeys = 20 } s3:listObjects("my-bucket", onListObjects, params)
Paging
If the bucket contains more than 1000 objects, or you have set the maxKeys to a number less than the total amount of objects in the bucket, you will receive a token in the response that you can use to get the next batch of results.
To check if more results are available, check for the nextToken key in the response event:
local token local function onListObjects( evt ) if evt.error then print(evt.error) else --check for more results if evt.nextToken then --store the token however you'd like token = evt.nextToken end --print out the current object list results for i=1, #evt.objects do print(evt.objects[i].key) end end end local params = { maxKeys = 20 } s3:listObjects("my-bucket", onListObjects, params)
You then call the listObjects method again, passing the token in the params to get the next batch:
-- listener function goes here -- ... local params = { maxKeys = 20, nextToken = token } s3:listObjects("my-bucket", onListObjects, params)
Start-After
To list objects after a specific object key, add the object key to the startAfter params key:
local params = { startAfter = "image001.png" }
putObject
Upload a file to a bucket owned by the AWS user.
s3:putObject(base_dir, file_path, bucket_name, object_key, listener[, params])
Parameters
Name | Description | Type | Required |
---|---|---|---|
base_dir | The system base directory. | Const | Y |
file_path | The source file path with extension. | String | Y |
bucket_name | The name of the destination bucket. | String | Y |
object_key | The destination object key with extension. | String | Y |
listener | An event listener to receive the results. | Function | Y |
params | Optional parameters for the put operation. | Table | N |
Usage
local function onPutObject( evt ) if evt.error then print(evt.error, evt.message, evt.status) else if evt.progress then print(evt.progress) else print("object upload complete") end end end s3:putObject( system.DocumentsDirectory, "image.png", "my-bucket", "my-image.png", onPutObject )
Put Object Parameters Keys
Key | Description | Type | Default |
---|---|---|---|
acl | A canned ACL code. | Const | s3.PRIVATE |
storage | The storage class for the uploaded file. | Const | s3.STANDARD |
Usage
local function onPutObject( evt ) if evt.error then print(evt.error, evt.message, evt.status) else if evt.progress then print(evt.progress) else print("object upload complete") end end end local params = { storage = s3.REDUCED_REDUNDANCY } s3:putObject("my-bucket", onPutObject, params)
Upload Progress
By default the putObject listener event returns a progress key with the current upload progress as a decimal value between 0 and 1 that you can use to create progress bars, etc.
If you don't care about the progress, you can write the listener function like so:
local function onPutObject( evt ) if evt.error then print(evt.error, evt.message, evt.status) else if not evt.progress then print("object upload complete") end end end
getObject
Download a file from a bucket owned by the AWS user.
s3:getObject(bucket_name, object_key, base_dir, dest_path, listener)
Parameters
Name | Description | Type | Required |
---|---|---|---|
bucket_name | The name of the source bucket. | String | Y |
object_key | The object key with extension. | String | Y |
base_dir | The system base directory. | Const | Y |
dest_path | The destination file path with extenstion. | String | Y |
listener | An event listener to receive the results. | Function | Y |
Usage
local function onGetObject( evt ) if evt.error then print(evt.error, evt.message, evt.status) else if evt.progress then print(evt.progress) else print("object download complete") end end end s3:getObject( "my-bucket", "image.png", system.DocumentsDirectory, "my-image.png", onGetObject )
Download Progress
By default the getObject listener event returns a progress key with the current download progress as a decimal value between 0 and 1 that you can use to create progress bars, etc.
If you don't care about the progress, you can write the listener function like so:
local function onGetObject( evt ) if evt.error then print(evt.error, evt.message, evt.status) else if not evt.progress then print("object download complete") end end end
deleteObject
Delete a file from a bucket owned by the AWS user.
s3:deleteObject(bucket_name, object_key, listener)
Parameters
Name | Description | Type | Required |
---|---|---|---|
bucket_name | The name of the source bucket. | String | Y |
object_key | The object file key with extension. | String | Y |
listener | An event listener to receive the results. | Function | Y |
Usage
local function onDeleteObject( evt ) if evt.error then print(evt.error, evt.message, evt.status) else print("object deleted") end end s3:deleteObject("my-bucket", "image.png", onDeleteObject)
Note
If the bucket object does not exist, this method will fail silently without an error.