На сегодняшний момент любое 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', ]);
Здесь нам также нужно прописать название нашего бакета, сам ключ куда мы хотим положить файл и сам локальный файл.
Важно правильно установить права на бакет. В нашем случае объект будет доступен для чтения всему миру по уникальной ссылке.