Работа с S3 в Yii2

На сегодняшний момент любое 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',
            ]);

Здесь нам также нужно прописать название нашего бакета, сам ключ куда мы хотим положить файл и сам локальный файл.

Важно правильно установить права на бакет. В нашем случае объект будет доступен для чтения всему миру по уникальной ссылке.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *