Amazon S3 Storage

To make integrating with Filestack even easier, we can automatically store all uploaded files into your existing file store. Currently, we support uploading to your S3 bucket, Rackspace cloud files container, Azure blob storage container, or Google Cloud Storage bucket.

Filestack can be configured to store users' files directly into your Amazon S3 storage account. To do this click the Amazon S3 link in your developer portal under Storage.

note: Filestack only officially supports the US Standard (us-east-1) S3 Region. It is possible to use other regions, but performance will be effected. The Mumbai and Ohio regions cannot currently be used.

You will need to specify the Amazon S3 Access Key and Secret Access Key as well as the default bucket to use.

Amazon S3 Storage Installation

This video walks through the steps listed below
  1. Create a bucket in the S3 section of the AWS console: console.aws.amazon.com

    Create an S3 bucket.
  2. Next use AWS IAM to create a bucket policy that has only read and write permissions:

    Create an S3 bucket policy.

    Specifically, your IAM policy should look like this:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AllowPublicRead",
                "Action": [
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:PutObjectAcl",
                    "s3:DeleteObject"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::YOUR_BUCKET_NAME/*"
                ]
            }
        ]
    }
            
  3. Create a group in the IAM section of the AWS console and attach your Policy to it:

    Create a group to share the policy with in S3.
  4. Create a new user in the IAM section of the AWS console and select "Generate an access key for each user". Save these keys as you will need them later:

    Create a user and generate your S3 keys.
  5. In the IAM section, attach your user to the group you created previously:

    Create a user and generate your S3 keys.
  6. Now you need to add the keys you created to your developer portal. In your Filestack Developer Portal add your Amazon Access Key ID, Secret Access Key, and Bucket Name. Hit test to verify that it all works.

    Enter your S3 Access Key and Secret Key in the Filestack developer portal.

Amazon S3 is all set up. You may now enter 'S3' as a value for the location storage options parameter.

Storing to S3 Storage using the Javascript API

You can store your files to Storage with the filepicker.pickAndStore Javascript API method.

filepicker.pickAndStore( { mimetype:"image/*", multiple: true }, { location:"S3" }, function(Blobs){ console.log(JSON.stringify(Blobs)); } );

S3 Storage Options for Javascript API

storage options
An optional dictionary of key-value pairs that configure how to store the data.
Filename
String
{filename: 'MyCoolPhoto.png'}

The name of the file as it will be stored. If this isn't provided, we do the best we can to come up with one.

Mimetype
String
{mimetype: 'text/html'}

The type of the file as it will be stored. If this isn't provided, we do the best we can, defaulting to "text/plain" if you give us raw data.

Base64 Decoding
Boolean
{base64decode: true}

Specify that you want the data to be first decoded from base64 before being written to the file. For example, if you have base64 encoded image data, you can use this flag to first decode the data before writing the image file.

Location
String
{location: 'S3'}

Where to store the file. The default is S3. Other options are 'azure', 'dropbox', 'rackspace' and 'gcs'. You must have configured your storage in the developer portal to enable this feature. Note:> Rackspace, Azure, Dropbox and Google Cloud are only available on the PLUS and higher plans.

Path
String
{path: '/myfiles/1234.png'}

The path to store the file at within the specified file store. For S3, this is the key where the file will be stored at. By default, Filestack stores the file at the root at a unique id, followed by an underscore, followed by the filename, for example "3AB239102DB_myphoto.png".

If the provided path ends in a '/', it will be treated as a folder, so if the provided path is "myfiles/" and the uploaded file is named "myphoto.png", the file will be stored at "myfiles/909DFAC9CB12_myphoto.png", for example.

If the multiple option is set to true, only paths that end in '/' are allowed.

Store Container
String
{storeContainer: 'user-photos'}

The bucket or container in the specified file store where the file should end up. This is especially useful if you have different containers for testing and production and you want to use them both on the same Filestack app. If this parameter is omitted, the file is stored in the default container specified in your developer portal. For pick functions, the parameter is storeContainer, for the filepicker.store() method the parameter is container.

Note: This parameter does not apply to the Dropbox file store.

Store Region
String
{storeRegion: 'us-east-1'}

The region where your storage container is located. This setting currently applies only to S3 buckets. If you are using a different bucket and region than the one you set up in your developer portal you can pass the storeRegion as part of your store options. If this parameter is not set we will do our best to determine the region your S3 bucket is located so that we can properly authenticate our connection request. You can find a list of the S3 regions here: in the "region" column.

Public Access
String
{access: 'public'}

Indicates that the file should be stored in a way that allows public access going directly to the underlying file store. For instance, if the file is stored on S3, this will allow the S3 url to be used directly. This has no impact on the ability of users to read from the Filestack file URL. Defaults to 'private'.

Security
String
{policy: POLICY, signature: SIGNATURE}

If you have security enabled, you'll need to have a valid Filestack policy and signature in order to perform the requested call. This allows you to select who can and cannot perform certain actions on your site. Read more about security and how to generate policies and signatures

S3 Storage Options for REST API

Similar to the filepicker.store call in javascript, you can use the Filestack files library to send files directly to your S3 bucket and get back a Blob for further operations. To do this, issue a POST to the /api/store/S3 endpoint, along with your apikey, the file, and an optional set of parameters.

Store local file to S3:
Request:
>>> curl -X POST -F fileUpload=@filename.txt https://www.filestackapi.com/api/store/S3?key=MY_API_KEY
Result:
{"url": "https://www.filestackapi.com/api/file/HLOon3NcTS6w7rqyZ3ei", "size": 234, "type": "text/plain", "filename": "tester.txt", "key": "1ilWxmaRRqhMd2vSbSyB_tester.txt"}
Store URL to S3
Request:
>>> curl -X POST -d url="https://d3urzlae3olibs.cloudfront.net/watermark.png" https://www.filestackapi.com/api/store/S3?key=MY_API_KEY
Request:
{"url": "https://www.filestackapi.com/api/file/s7tdGfE5RRKFUxwsZoYv", "size": 8331, "type": "image/png", "filename": "watermark.png", "key": "a1RyBxiglW92bS2SRmqM_watermark.png"}
Store URL to S3 and set parameters
Request:
>>> curl  -X POST  -d  url="https://d3urzlae3olibs.cloudfront.net/watermark.png"  "https://www.filestackapi.com/api/store/S3?key=AhTgLagciQByzXpFGRI0Az&path=/myfiles/1234.png&mimetype=image/png"
Request:
{"container": "custom_source", "url": "https://www.filestackapi.com/api/file/rLNF34IvRWybiNIATg4D", "filename": "watermark.png", "key": "myfiles/1234.png", "type": "image/png", "size": 8331}

The REST Store parameter names are exactly the same as the Javascript ones.

If you set additional parameters make sure that the URL is given in quotes.

syntax
https://www.filestackapi.com/api/store/S3?key=MY_API_KEY&[options]

These parameters can be appended to your URL, after your API key with the & symbol and parameter_name=

Filename
String
{filename=MyCoolPhoto.png}

The name of the file as it will be stored. If this isn't provided, we do the best we can to come up with one.

Path
String
{path=/myfiles/1234.png}

The path to store the file at within the specified file store. For S3, this is the key where the file will be stored at. By default, Filestack stores the file at the root at a unique id, followed by an underscore, followed by the filename, for example "3AB239102DB_myphoto.png".

If the provided path ends in a '/', it will be treated as a folder, so if the provided path is "myfiles/" and the uploaded file is named "myphoto.png", the file will be stored at "myfiles/909DFAC9CB12_myphoto.png", for example.

If the multiple option is set to true, only paths that end in '/' are allowed.

Mimetype
String
{mimetype=text/html}

The type of the file as it will be stored. If this isn't provided, we do the best we can, defaulting to "text/plain" if you give us raw data.

Base64 Decoding
Boolean
{base64decode=true}

Specify that you want the data to be first decoded from base64 before being written to the file. For example, if you have base64 encoded image data, you can use this flag to first decode the data before writing the image file.

Store Container
String
{container=user-photos}

The bucket or container in the specified file store where the file should end up. This is especially useful if you have different containers for testing and production and you want to use them both on the same Filestack app. If this parameter is omitted, the file is stored in the default container specified in your developer portal.

Note: This parameter does not apply to the Dropbox file store.

Store Region
String
{storeRegion=us-east-1}

The region where your storage container is located. This setting currently applies only to S3 buckets. If you are using a different bucket and region than the one you set up in your developer portal you can pass the storeRegion as part of your store options. If this parameter is not set we will do our best to determine the region your S3 bucket is located so that we can properly authenticate our connection request. You can find a list of the S3 regions here: in the "region" column.

Public Access
String
{access=public}

Indicates that the file should be stored in a way that allows public access going directly to the underlying file store. For instance, if the file is stored on S3, this will allow the S3 url to be used directly. This has no impact on the ability of users to read from the Filestack file URL. Defaults to 'private'.

Security
String
{policy=POLICY&signature=SIGNATURE}

If you have security enabled, you'll need to have a valid Filestack policy and signature in order to perform the requested call. This allows you to select who can and cannot perform certain actions on your site. Read more about security and how to generate policies and signatures