File System
Компонент для работы с файловыми хранилищами на основе Flysystem.
Он позволяет работать как с локальной файловой системой, так и с удаленными хранилищами используя единый интерфейс. Например с Amazon AWS S3, Azure Blob Storage, Yandex Objet Storage, BunnyCdn, Google Cloud Storage, WebDav, FTP, SFTP и др.
Класс для работы с локальной файловой системой входит в состав Cotonti Lib и не требует доплнительной установки других библиотек. Его интерфейс совместим с \League\Flysystem\FilesystemOperator
и они взаимозаменяемы.
Для подключения другой (удаленной) файловой системы нужно установить Flysystem и нужный адаптер.
Для этого в composer.json
нужно добавить строки:
"league/flysystem": "^3.0", "league/flysystem-aws-s3-v3": "^3.0"
В этом примере мы добавили адаптер для файловых хранилищ, поддерживающий AWS S3.
И выполнить в командной строке:
composer update
Composer для Windows имеет баг который может в файле lib/composer/autoload_static.php
сделать что то такое:
public static $fallbackDirsPsr4 = array ( 0 => 'C:\\OpenServerData\\domains\\my-site.loc\\public_html\\lib', );
Надо вернуть как было:
public static $fallbackDirsPsr4 = array ( 0 => DIR . '/../..' . '/lib', );
Теперь адатер файловой системы готов к использованию в коде Ваших расширений.
Для создания экземпляра можно воспользоваться инструкцией к соотвествующему адаптеру или воспользоваться "фабрикой" из Cotonti Lib.
Использование фабрики является предпочтительным при создании расширений т.к. позволяет конфигурировать подключения к файловым системам и использовать нужные в зависимости от конфигурации.
Конфигурирование файловых систем.
В файл datas/config.php
нужно добавить элемент такого вида:
$cfg['filesystem'] = [ // Подключение к Yandex Object Storage 'Yandex.Cloud' => [ 'adapter' => '\League\Flysystem\AwsS3V3\AwsS3V3Adapter', 'config' => [ //'version' => 'latest', // Optional 'endpoint' => 'https://storage.yandexcloud.net', 'region' => 'ru-central1', 'bucket' => 'my-bucket-name', 'accessKey' => 'MyAccessKey', 'secretKey' => 'MySecretKey', // install: composer require league/flysystem-path-prefixing:^3.3 to use prefix //'pathPrefix' => 'a/path/prefix', ], ], // Подключение к другому серверу по FTP 'FTP' => [ 'adapter' => '\League\Flysystem\Ftp\FtpAdapter', 'config' => [ 'client' => [ 'host' => 'my-pretty-host.tld', 'root' => '/var/www/files/storage/here', 'username' => 'server-user', 'password' => 'someThingReallySecret', ], // install: composer require league/flysystem-path-prefixing:^3.3 to use prefix //'pathPrefix' => 'a/path/prefix', ], ], // Подключение к BunnyCDN 'BunnyCDN' => [ 'adapter' => '\PlatformCommunity\Flysystem\BunnyCDN\BunnyCDNAdapter', 'config' => [ 'storageZoneName' => 'test-files', 'apiKey' => 'my-api-key', 'pullZoneUrl' => 'https://test-files.b-cdn.net', //'region' => 'de', // optional // install composer require league/flysystem-path-prefixing:^3.3 to use prefix //'pathPrefix' => 'a/path/prefix', ], ], ];
В этом примере мы сконфигурировали подключение к Yandex Object Storage и к удаленному серверу по FTP.
Ключ массива - это название подключения, может быть любым.
'adapter' - имя класса адаптера. Поддерживаются и псевдонимы. Например вместо '\League\Flysystem\AwsS3V3\AwsS3V3Adapter'
можно использовать 'Aws'
или 'AwsS3'
. Фабрика их поймет.
'config' - конфигурация подключения. Т.к. файловые системы имют очень разные API и способы подключения, то для каждого адаптера 'config' свой.
За подробностями можно обратиться к описанию самого адаптера и в код файла фабрики.
Если вы хотите добавить в фабрику подключение адаптера, которого в ней нет или создать подключение с более специфичной конфигурацией, то это можно сделать либо через хук filesystem.getFilesystem
либо определив функцию cot_getFilesystem($fileSystemName, $pathPrefix)
.
Пример использования:
use \filesystem\FilesystemFactory; // Получить экземпляр класса файловой системы по имени подлючения из конфига выше $filesystem = FilesystemFactory::getFilesystem('Yandex.Cloud'); // Запись в файл $filesystem->write($path, $contents);
Методы класса \League\Flysystem\Filesystem
описаны в документации.
Комментарии:
Оставить комментарий:
* Просьба все технические вопросы, которые могут потребовать обсуждения, задавать на форуме.
** все некорректные и рекламные посты будут удаляться, ненормативная лексика и оскорбительные высказывания запрещаются.