AsyncAws S3 Adapter

Installation

composer require league/flysystem-async-aws-s3:^3.0

About

Interacting with Aws S3 through Flysystem can be done by using the League\Flysystem\AsyncAwsS3\AsyncAwsS3Adapter.

Read more about AsyncAws’s S3Client in their documentation.

Simple usage:

$client = new AsyncAws\S3\S3Client();

// The internal adapter
$adapter = new League\Flysystem\AsyncAwsS3\AsyncAwsS3Adapter(
 // S3Client
 $client,
 // Bucket name
 'bucket-name'
);

// The FilesystemOperator
$filesystem = new League\Flysystem\Filesystem($adapter);

Advanced usage:

$client = new AsyncAws\S3\S3Client();

// The internal adapter
$adapter = new League\Flysystem\AsyncAwsS3\AsyncAwsS3Adapter(
 // S3Client
 $client,
 // Bucket name
 'bucket-name',
 // Optional path prefix
 'path/prefix',
 // Visibility converter (League\Flysystem\AsyncAwsS3\VisibilityConverter)
 new League\Flysystem\AsyncAwsS3\PortableVisibilityConverter(
 // Optional default for directories
 League\Flysystem\Visibility::PUBLIC // or ::PRIVATE
 )
);

// The FilesystemOperator
$filesystem = new League\Flysystem\Filesystem($adapter);

Support for large files:

If you want to upload files larger than 5GB you need to use the SimpleS3Client. The SimpleS3Client automatically switches to MultipartUpload for large files. It also supports a user-friendly interface to upload(), download(), getUrl() etc if you happen to use the client without Flysystem.

composer require async-aws/simple-s3
$client = new AsyncAws\SimpleS3\SimpleS3Client();
$adapter = new League\Flysystem\AsyncAwsS3\AsyncAwsS3Adapter($client, 'bucket-name');
$filesystem = new League\Flysystem\Filesystem($adapter);

You can read about required IAM permissions in docs about AWS S3 adapter.