Using the Laravel Filesystem, it's very easy to use cloud providers as regular filesystems.

By default, Amazon S3 (compatible) filesystems are suppported out-of-the-box.

In my setup, I wanted to use Dropbox instead.

As Laravel's filesystem is based on Flysystem, I started with installing a Flysystem driver for Dropbox:

$ composer install spatie/flysystem-dropbox

The next step is to create a provider under app/Providers/DropboxServiceProvider.php:

<?php
 
namespace App\Providers;
 
use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Filesystem;
use Spatie\Dropbox\Client;
use Spatie\FlysystemDropbox\DropboxAdapter;
 
class DropboxServiceProvider extends ServiceProvider
{
public function register()
{
}
 
public function boot()
{
Storage::extend('dropbox', function ($app, $config) {
$adapter = new DropboxAdapter(new Client(
$config['authorization_token']
));
 
return new FilesystemAdapter(
new Filesystem($adapter, $config),
$adapter,
$config
);
});
}
}

The provider extends the Storage class by adding a custom provider called "dropbox" in our example.

FilesystemAdapater is the link between Flysystem and what Laravel expects.

Don't forget to register your provider in config/app.php under the key providers.

<?php
 
return [
// ...
 
'providers' => [
// ...
 
App\Providers\DropboxServiceProvider::class,
 
// ...
],
 
// ...
];

The next step is to add a new filesystem to config/filesystems.php:

<?php
 
return [
// ...
 
'disks' => [
// ...
 
'dropbox-backup' => [
'driver' => 'dropbox',
'authorization_token' => env('DROPBOX_ACCESS_TOKEN'),
],
],
 
// ...
];

The last step is to generate an access token for Dropbox and add it to your .env file:

DROPBOX_ACCESS_TOKEN=<your-access-token>