На сегодняшний момент любое Stateless приложение невозможно представить без использования object storage хранилища на подобии AWS S3. Также многие облачные провайдеры (DigitalOcean) стали предоставлять S3-совместимые хранилища по привлекательным ценам.
Как подключить работу с S3 в Yii2?
Для этого для начала воспользуемся библиотекой aws/aws-sdk-php:
composer require aws/aws-sdk-php
Далее для работы нам необходимо сгенерировать ключи доступа на стороне провайдера и записать их как переменные AWS_SECRET_ACCESS_KEY и AWS_ACCESS_KEY_ID. SDK будет брать эти ключи из наших переменных окружения ($_ENV).
Далее создадим объект:
$provider = CredentialProvider::env();
$s3 = new S3Client([
'version' => 'latest',
'region' => getenv('STORAGE_REGION'),
'endpoint' => getenv('STORAGE_ENDPOINT'),
'credentials' => $provider,
]);
Как мы видим нам также нужно указать endpoint и region где находится наш bucket.
Теперь давайте попробуем положить файл в наше хранилище:
$s3->putObject([
'Bucket' => 'our_bucket_name',
'Key' => 'images/uploaded_file.png',
'SourceFile' => 'upload/file_to_upload.png',
'ACL' => 'public-read',
]);
Здесь нам также нужно прописать название нашего бакета, сам ключ куда мы хотим положить файл и сам локальный файл.
Важно правильно установить права на бакет. В нашем случае объект будет доступен для чтения всему миру по уникальной ссылке.