node package manager
Stop wasting time. Easily manage code sharing in your team. Create a free org »


React Native AWS3

React Native AWS3 is a module for uploading files to S3. Unlike other libraries out there, there are no native dependencies.

npm install --save react-native-aws3

Note on S3 user permissions

The user associated with the accessKey and secretKey you use must have the appropriate permissions assigned to them. My user's IAM policy looks like:

    "Version": "2012-10-17",
    "Statement": [
            "Sid": "Stmt1458840156000",
            "Effect": "Allow",
            "Action": [
            "Resource": [


import { RNS3 } from 'react-native-aws3';
let file = {
  // `uri` can also be a file system path (i.e. file://) 
  uri: "assets-library://asset/asset.PNG?id=655DBE66-8008-459C-9358-914E1FB532DD&ext=PNG",
  name: "image.png",
  type: "image/png"
let options = {
  keyPrefix: "uploads/",
  bucket: "your-bucket",
  region: "us-east-1",
  accessKey: "your-access-key",
  secretKey: "your-secret-key",
  successActionStatus: 201
RNS3.put(file, options).then(response => {
  if (response.status !== 201)
    throw new Error("Failed to upload image to S3");
   * {
   *   postResponse: {
   *     bucket: "your-bucket",
   *     etag : "9f620878e06d28774406017480a59fd4",
   *     key: "uploads/image.png",
   *     location: ""
   *   }
   * }


put(file, options)

Upload a file to S3.


  1. file
  • uri required - File system URI, can be assets library path or file:// path
  • name required - The name of the file, will be stored as such in S3
  • type required - The mime type, also used for Content-Type parameter in the S3 post policy
  1. options
  • acl - The Access Control List of this object. Defaults to public-read
  • keyPrefix - Prefix, or path to the file on S3, i.e. uploads/ (note the trailing slash)
  • bucket required - Your S3 bucket
  • region required - The region of your S3 bucket
  • accessKey required - Your S3 AWSAccessKeyId
  • secretKey required - Your S3 AWSSecretKey
  • successActionStatus - HTTP response status if successful, defaults to 201
  • awsUrl - AWS S3 url. Defaults to
  • timeDelta - Devices time offset from world clock in milliseconds, defaults to 0

Returns an object that wraps an XMLHttpRequest instance and behaves like a promise, with the following additional methods:

  • progress - accepts a callback which will be called with an event representing the progress of the upload. Event object is of shape
    • loaded - amount uploaded
    • total - total amount to upload
    • percent - number between 0 and 1 representing the percent completed
  • abort - aborts the xhr instance


RNS3.put(file, options)
  .progress((e) => console.log(e.loaded /; // or console.log(e.percent) 
RNS3.put(file, option)


  • Support DeleteObject and (authenticated) GetObject operations.