FileUploadS3

Module is configuration only and simplifies uploads to AWS S3 cloud storage. It also provides methods for creating signed, expiring urls.

Creating FileUpload Object

To create the module (instantiate class) and prepare it for use, just provide configuration object as following:

import { FileUploadS3 } from 'node-mariner'

const Uploader new = FileUploadS3({
  s3: {
    accessKeyId: '<YOUR_ACCESS_KEY_ID>',
    secretAccessKey: '<YOUR_SECRET_ACCESS_KEY>',
    region: 'us-east-1'
  },
  bucket: 'mariner',
  urlExpiration: 60
})

All FileUploadS3 configuration properties are mandatory unless stated differently.

key

type

description

s3

object

Configuration obtained from AWS S3, keys are accessKeyId, secretAccessKey, region

bucket

string

S3 bucket name

urlExpiration (optional)

integer, defaults to 120

Expiration time in seconds if you are using signed links

Caution: do not store s3 keys in the repository, use dotenv or environment variables.

Uploading files

To upload a file, you use instantiated FileUploaderS3, provide a <Buffer>, path (key) and optional callbacks for upload success and upload error.

const sampleBuffer = new Buffer(512); // ... buffer obtained from upload, etc...

try {
  const url = await Uploader.upload({
    file: sampleBuffer,
    key: 'some/path/sampleBuffer.txt'
  });
  // console.log(url) // handle success
} catch(e) {
  // handle upload failure
}

Uploader.upload configuration object:

key

type

description

file

Buffer

Configuration obtained from AWS S3, keys are accessKeyId, 'secretAccessKey', region

key

string

path (key), and filename with extension

Uploading files to different buckets

To upload files to different buckets, instantiate two objects with separate configuration and use those accordingly:

const s3 = { ... }
export const BucketA = new FileUploadS3({ s3, bucket: 'bucketA' })
export const BucketB = new FileUploadS3({ s3, bucket: 'bucketB' })

AWS S3 can provide signed links, that have expiry date. If you prefer signed links, you should set your bucket to private. Rest is easy as:

const signedUrl = BucketA.getUrl('some/key.txt')
console.log(signedUrl) // returns signed url for file key.txt in bucketA

Please note that function is synchronous and requires one argument (key). If you want to set up custom expiry, you can set urlExpiration in FileUploadS3 configuration object. Default urlExpiration is set to 120 seconds.

Last updated