spondonit / flysystem-google-drive
Flysystem adapter for Google Drive
v1.0.1
2022-12-14 14:51 UTC
Requires
- php: >=8.1
- google/apiclient: ^2.0
- league/flysystem: ~3.0
- nao-pon/flysystem-cached-extra: ~1.0
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~4.0
README
Installation
- For Google Drive API V3
composer require spondonit/flysystem-google-drive:~1.1
- For Google Drive API V2 "Deprecated"
composer require spondonit/flysystem-google-drive:~1.0.0
Usage
Follow Google Docs to obtain your ClientId, ClientSecret & refreshToken
in addition you can also check this easy-to-follow tutorial
- you can also check This Example for a better understanding.
$client = new \Google_Client();
$client->setClientId('[app client id].apps.googleusercontent.com');
$client->setClientSecret('[app client secret]');
$client->refreshToken('[your refresh token]');
$service = new \Google_Service_Drive($client);
$adapter = new \SpondonIt\Flysystem\GoogleDrive\GoogleDriveAdapter($service, '['root' or folder ID]');
/* Recommended cached adapter use */
// $adapter = new \League\Flysystem\Cached\CachedAdapter(
// new \SpondonIt\Flysystem\GoogleDrive\GoogleDriveAdapter($service, '['root' or folder ID]'),
// new \League\Flysystem\Cached\Storage\Memory()
// );
$filesystem = new \League\Flysystem\Filesystem($adapter);
Usage to with elFinder
composer require spondonit/elfinder-flysystem-driver-ext
composer require spondonit/flysystem-google-drive:~1.1
// Load composer autoloader
require 'vender/autoload.php';
// Google API Client
$client = new \Google_Client();
$client->setClientId('xxxxx CLIENTID xxxxx');
$client->setClientSecret('xxxxx CLIENTSECRET xxxxx');
$client->refreshToken('xxxxx REFRESH TOKEN xxxxx');
// Google Drive Adapter
$googleDrive = new \SpondonIt\Flysystem\GoogleDrive\GoogleDriveAdapter(
new \Google_Service_Drive($client), // Client service
'root', // Folder ID as root ('root' or Folder ID)
[ 'useHasDir' => true ] // options (elFinder need hasDir method)
);
// Extended cached strage adapter class for cache enabled of hasDir() method
class myCachedStrageAdapter extends \League\Flysystem\Cached\Storage\Adapter
{
use \SpondonIt\Flysystem\Cached\Extra\Hasdir;
use \SpondonIt\Flysystem\Cached\Extra\DisableEnsureParentDirectories;
}
// Make Flysystem adapter and cache object
$useCache = true;
if ($useCache) {
// Example to Flysystem cacheing
$cache = new myCachedStrageAdapter(
new \League\Flysystem\Adapter\Local('flycache'),
'gdcache',
300
);
// Flysystem cached adapter
$adapter = new \League\Flysystem\Cached\CachedAdapter(
$googleDrive,
$cache
);
} else {
// Not use cached adapter
$cache = null;
$adapter = $googleDrive;
}
// Google Drive elFinder Volume driver
$gdrive = [
// require
'driver' => 'FlysystemExt',
'filesystem' => new \League\Flysystem\Filesystem($adapter),
'fscache' => $cache,
'separator' => '/',
// optional
'alias' => 'GoogleDrive',
'rootCssClass' => 'elfinder-navbar-root-googledrive'
];
// elFinder volume roots options
$elFinderOpts = [
'roots' => []
];
$elFinderOpts['roots'][] = $gdrive;
// run elFinder
$connector = new elFinderConnector(new elFinder($elFinderOpts));
$connector->run();
Tips
TODO
- Unit tests to be written