A simple s3 library for node

SimpleS3 is a very simple S3 http client. It wraps hyperquest for HTTP requests, and faketoe for xml parsing.


npm install simples3

Simply pass a config in with a key, secret, and optional host (host defaults to Amazon's S3 service)

var config = {
  key: 'AWSKEY',
  secret: 'AWSSECRET',
  host: ''
  simpleS3 = require('simples3'),
  s3Store = simpleS3.createClient(config);
s3Store.getBuckets(function _bucketList(errbuckets) {
s3Store.getBucket('myBucket', function _bucketInfo(errbucketInfo) {
  //To get just the files in the bucket 
s3Store.createBucket('newBucket', function _newBucket(errnewBucket) {
  //Returns the created bucket info 
s3Store.deleteBucket('badBucket', function _deletedBucket(errdeletedBucket) {
  //Returns info for the deleted bucket 
// Note that this returns a response object from S3 as well as the object 
s3Store.getObject('myBucket', 'objectId', function _responseObject(errresponsemyObject) {
// This function also returns a stream that can be piped directly to a writable stream 
s3Store.getObject('myBucket', 'objectId').pipe(fs.createWriteStream('./temp.out'));
var expires = new Date();
expires.setHours(expires.getHours() + 1); // JavaScript date object: one hour from now 
s3store.getObjectUrl('myBucket', 'objectId', expires, function _objectUrl(errurl) {
// You can either send data directly 
var fileinfo = {
  data: fs.readFileSync('./images/funny/cat_macro.png'),
  type: 'image/png'
s3Store.createObject('myBucket', 'cat_macro.png', fileInfo, function _newObject(errobject) {
  //Returns info for the uploaded object 
// Or you can provide some metadata and stream the data 
var fileinfo = {
  type: 'image/png',
  size: 65432 // you're on your own to determine this before starting the stream 
fs.createReadStream('./images/funny/cat_macro.png').pipe(s3Store.createObject('myBucket', 'cat_macro.png', fileInfo, function _newObject(errobject) {
  //Returns info for the uploaded object 
  console.log(object); //Object id will be 'cat_macro.png' 

Works just like creating an object, just use updateObject instead. There isn't much of a distinction between the two in S3

s3Store.deleteObject('myBucket', 'cat_macro.png', function _deletedObject(errdeletedObject) {
  //Returns info on the deleted object 
s3Store.parseUrl('', function (errresult) {
  // Returns an object with 'bucket' and 'resource' properties 
// Also works synchronously 
var parts = s3Store.parseUrl('');