+ Adapters
+Different storage adapters are provided through the awesome Flysystem library.
+You can use local filesystem (default), FTP, SFTP, Amazon S3, DigitalOcean Spaces, Microsoft Azure Blob, Dropbox and many others.
+Please check the Flysystem docs for the exact setup required for each adapter.
+Notes: Some adapters do not support folder operations or their support is limited.
+Requiring additional libraries with composer requires root access.
+Default Local Disk Adapter
+With default adapter you just need to configure where your repository
folder is. This folder will serve as a root for everything else.
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [],
+ 'adapter' => function () {
+ return new \League\Flysystem\Adapter\Local(
+ __DIR__.'/repository'
+ );
+ },
+ ],
+ ],
+
+FTP Adapter
+See official documentation.
+Sample configuration:
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [],
+ 'adapter' => function () {
+ return new \League\Flysystem\Adapter\Ftp([
+ 'host' => 'example.com',
+ 'username' => 'demo',
+ 'password' => 'password',
+ 'port' => 21,
+ 'timeout' => 10,
+ ]);
+ },
+ ],
+ ],
+
+SFTP Adapter
+You must require additional library composer require league/flysystem-sftp:^1.0 -W
+For more advanced options like using your private key or changing the document root see official documentation.
+Sample configuration:
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [],
+ 'adapter' => function () {
+ return new \League\Flysystem\Sftp\SftpAdapter([
+ 'host' => 'example.com',
+ 'port' => 22,
+ 'username' => 'demo',
+ 'password' => 'password',
+ 'timeout' => 10,
+ ]);
+ },
+ ],
+ ],
+
+Dropbox Adapter
+You must require additional library composer require spatie/flysystem-dropbox
+See official documentation.
+Sample configuration:
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [
+ 'case_sensitive' => false,
+ ],
+ 'adapter' => function () {
+ $authorizationToken = '1234';
+ $client = new \Spatie\Dropbox\Client($authorizationToken);
+
+ return new \Spatie\FlysystemDropbox\DropboxAdapter($client);
+ },
+ ],
+ ],
+
+Amazon S3 Adapter (v3)
+You must require additional library composer require league/flysystem-aws-s3-v3:^1.0 -W
+See official documentation.
+Sample configuration:
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [],
+ 'adapter' => function () {
+ $client = new \Aws\S3\S3Client([
+ 'credentials' => [
+ 'key' => '123456',
+ 'secret' => 'secret123456',
+ ],
+ 'region' => 'us-east-1',
+ 'version' => 'latest',
+ ]);
+
+ return new \League\Flysystem\AwsS3v3\AwsS3Adapter($client, 'my-bucket-name');
+ },
+ ],
+ ],
+
+DigitalOcean Spaces
+You must require additional library composer require league/flysystem-aws-s3-v3:^1.0 -W
+The DigitalOcean Spaces API are compatible with those of S3.
+See official documentation.
+Sample configuration:
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [],
+ 'adapter' => function () {
+ $client = new \Aws\S3\S3Client([
+ 'credentials' => [
+ 'key' => '123456',
+ 'secret' => 'secret123456',
+ ],
+ 'region' => 'us-east-1',
+ 'version' => 'latest',
+ 'endpoint' => 'https://nyc3.digitaloceanspaces.com',
+ ]);
+
+ return new \League\Flysystem\AwsS3v3\AwsS3Adapter($client, 'my-bucket-name');
+ },
+ ],
+ ],
+
+Microsoft Azure Blob Storage
+You must require additional library composer require league/flysystem-azure-blob-storage:^1.0 -W
+See official documentation.
+Sample configuration:
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [],
+ 'adapter' => function () {
+ $accountName = 'your_storage_account_name';
+ $accountKey = '123456';
+ $containerName = 'my_container';
+
+ $client = \MicrosoftAzure\Storage\Blob\BlobRestProxy::createBlobService(
+ "DefaultEndpointsProtocol=https;AccountName=${accountName};AccountKey=${accountKey};"
+ );
+
+ return new \League\Flysystem\AzureBlobStorage\AzureBlobStorageAdapter($client, $containerName);
+ },
+ ],
+ ],
+Replicate Adapter
+You must require additional library composer require league/flysystem-replicate-adapter
+The ReplicateAdapter facilitates smooth transitions between adapters, allowing an application to stay functional and migrate its files from one adapter to another. The adapter takes two other adapters, a source and a replica. Every change is delegated to both adapters, while all the read operations are passed onto the source only.
+See official documentation.
+Sample configuration:
+ 'Filegator\Services\Storage\Filesystem' => [
+ 'handler' => '\Filegator\Services\Storage\Filesystem',
+ 'config' => [
+ 'separator' => '/',
+ 'config' => [
+ 'case_sensitive' => false,
+ ],
+ 'adapter' => function () {
+ $authorizationToken = '1234';
+ $client = new \Spatie\Dropbox\Client($authorizationToken);
+
+ $source = new \Spatie\FlysystemDropbox\DropboxAdapter($client);
+ $replica = new \League\Flysystem\Adapter\Local(__DIR__.'/repository');
+
+ return new League\Flysystem\Replicate\ReplicateAdapter($source, $replica);
+ },
+ ],
+ ],
+
+