How To Send Data From Your Flutter App to Amazon S3

How To Send Data From Your Flutter App to Amazon S3

If you're developing a Flutter app and need a secure and scalable storage solution, Amazon S3 would be a fast, secure and scalable option for you. In this article, we'll explore the process of integrating Amazon S3 with a Flutter app and uploading data to an S3 bucket. Let's get started!

Understanding Amazon S3 and Flutter

Amazon S3 is a simple storage service that allows you to store and retrieve data from anywhere with an internet connection. This cloud-based storage service is highly scalable and secure, making it a popular choice for businesses of all sizes. On the other hand, Flutter is a popular open-source mobile application development framework that allows developers to build high-quality, cross-platform mobile apps.

What is Amazon S3?

Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, durability, availability, and security. It allows developers to store and retrieve data, images, and videos with low latency and high throughput via a simple web services interface. Amazon S3 is designed to be highly scalable, which means it can handle large amounts of data without compromising on performance. It is also highly secure, with features such as encryption, access control, and multi-factor authentication.

Why use Amazon S3 storage for your Flutter app?

Flutter apps require a secure and scalable storage solution that can handle user-generated data and media. Amazon S3 is an ideal option that can store and retrieve large amounts of data quickly, reliably, and securely. Moreover, it offers easy integration with Flutter through the AWS SDK for Flutter. With Amazon S3, you can store and retrieve data from anywhere in the world, making it a highly flexible solution for your Flutter app.

Benefits of integrating Amazon S3 with Flutter

The integration of Amazon S3 with Flutter offers various benefits, including:

  • Secure and scalable storage solution for your Flutter app
  • Low-cost and efficient data storage
  • Easy retrieval of data from anywhere with an internet connection
  • Simple and easy-to-use APIs for storing and retrieving data
  • Highly durable and available data storage

Integrating Amazon S3 with Flutter can also help you improve the performance of your app; when storing user-generated data and media on Amazon S3, you can reduce the load on your app's servers, which can significantly reduce server costs. Additionally, Amazon S3 offers a range of features that can help you optimize your app's performance, such as caching and content delivery networks.

Another benefit of integrating Amazon S3 with Flutter is that it can help you improve the security of your app. Amazon S3 offers a range of security features, such as encryption, access control, and multi-factor authentication, that can help you protect your app's data from unauthorized access. By using Amazon S3 to store user-generated data and media, you can ensure that your app's data is secure and protected at all times.

Integrating Amazon S3 with Flutter can help you build high-quality, scalable, and secure mobile apps. With its low-cost, efficient data storage, easy-to-use APIs, and flexible scalability, Amazon S3 is an ideal storage solution for Flutter apps of all sizes.

Setting up your Amazon S3 account

The first step to integrating Amazon S3 with your Flutter app is setting up your S3 account. Here is a step-by-step process to set up your Amazon S3 account:

Creating an AWS account

If you don't already have an AWS account, you can create one by going to the AWS homepage and following the registration process. AWS offers a free tier account that allows you to use many of its services for free for 12 months. Once you're registered, you can access the Amazon S3 dashboard to create your first S3 bucket

Creating an S3 bucket create your first S3 bucket.

Once you're logged in to your AWS account, navigate to the S3 dashboard and click the "Create Bucket" button. Give your bucket a unique name that is easy to remember and relevant to your use case. You can choose a region that is closest to your users for faster access and choose the appropriate settings for your use case. For example, you can enable versioning to keep track of multiple versions of your files or enable server access logging to monitor access to your bucket.

Configuring bucket permissions

Before you can start uploading data to your bucket, you'll need to configure its permissions. AWS provides various permission settings for buckets and objects, which you can configure to restrict or grant access to your data. For example, you can create an IAM user with limited access to your bucket or set up a bucket policy to allow access to specific IP addresses or users. You can also enable encryption to protect your data at rest and in transit.

Once your bucket is set up and configured, you're ready to integrate Amazon S3 with your Flutter app to start storing data. Amazon S3 provides a simple and flexible REST API that allows you to interact with your buckets and objects programmatically. You can use the AWS SDK for Dart to access the Amazon S3 API from your Flutter app and perform operations such as uploading and downloading files, listing objects, and managing permissions.

Integrating Amazon S3 with your Flutter app

There are multiple ways to integrate Amazon S3 with a Flutter application such as using Amazon S3 REST APIs directly or using AWS Amplify SDK. In this tutorial, we'll use AWS Amplify for the integration and walk you through the steps required to get your environment set up and ready for development.

The easiest way to get started with the development and storage provisioning is by using Amplify CLI. Once you install the Amplify CLI, use following commands to provision storage for your test app

amplify add storage
amplify push

Here you’ll be prompted to ask some questions to set configurations including the bucket name. Now that your AWS bucket is set up, you can move on to the next step.

Installing Flutter dependencies

The first step in setting up your development environment is to install Flutter and its dependencies. To do this, you'll need to follow the instructions provided on the Flutter website for your specific operating system.

Once you've installed Flutter, you'll need to ensure that you have the required packages installed in your project. These packages are essential for interacting with Amazon S3.

Adding the Required Packages to Your Flutter Project

We need mainly Amplify Flutter package, Amplify Storage package to interact with S3. We also need a secure way to authenticate our Amazon S3 requests with our credentials, and for that we will use the Amazon Cognito.

To add these dependencies in your project, edit the pubspec.yaml file to add these packages:

sdk: ">=2.18.0 <4.0.0"
flutter: ">=3.3.0"
sdk: flutter
amplify_auth_cognito: ^1.0.0
amplify_flutter: ^1.0.0
amplify_storage_s3: ^1.0.0

These packages will allow you to interact with AWS services from within your Flutter app. Make sure you’re getting the latest versions of these SDKs.

Configure Amplify for Flutter app

Once you have the necessary packages installed, you'll need to initialize the AWS Amplify SDK for Flutter. To initialize the Amplify Auth and Storage categories, call `Amplify.addPlugin()` for each plugin or pass all the plugins in Amplify.addPlugins(). To complete initialization, call Amplify.configure().

To do this, you can add the following code to your app's main.dart file:

import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_storage_s3/amplify_storage_s3.dart';
import 'package:flutter/material.dart';
import 'amplifyconfiguration.dart';
Future<void> _configureAmplify() async {
try {
await Amplify.addPlugins([AmplifyAuthCognito(), AmplifyStorageS3()]);
// call Amplify.configure to use the initialized categories in your app
await Amplify.configure(amplifyconfig);
} on Exception catch (e) {
safePrint('An error occurred configuring Amplify: $e');
Future<void> main() async {
await _configureAmplify();
runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
// ...

Uploading files to Amazon S3 from Flutter app

To upload files to S3, we can use `Amplify.Storage.uploadFile` method:

void _uploadFile() async {
try {
// Get the file from the filesystem
File local = await FilePicker.getFile(type: FileType.custom);
final key = new;
Map<String, String> metadata = <String, String>{};
metadata['name'] = 'filename';
metadata['description'] = 'A test file';
S3UploadFileOptions options = S3UploadFileOptions(accessLevel: StorageAccessLevel.guest, metadata: metadata);
UploadFileResult result = await Amplify.Storage.uploadFile(
key: key,
local: local,
options: options
} catch (e) {

That’s it, your data is uploaded to Amazon S3. You can further use Amplify SDK to perform more operations on your data such as listing (`Amplify.Storage.list` method) or deleting (`Amplify.Storage.delete` method) the data in Amazon S3. We recommend you read the AWS Amplify docs for more information.


By following the steps outlined in this article, you can easily set up your S3 account, configure the AWS SDK for Flutter, and start uploading files to your S3 bucket in no time. We discussed how to use AWS Amplify SDK for the integration with Amazon S3 for your Flutter app and provided references to other methods of integration as well. Check out RudderStack's Flutter App to Amazon S3 integration.

Don't want to go through the pain of direct integration? RudderStack's Flutter SDK makes it easy to send data from your Flutter app to Amazon S3.