An Amazon S3Client wrapper as Yii2 component.
Yii2 AWS S3 can only work with one bucket per a component configuration.
The component currently supports CloudFront (getting a CDN url for an object in a S3 bucket).
-
Run the Composer command to install the latest stable version:
composer require frostealth/yii2-aws-s3
-
Add component to
config/main.php
'components' => [ // ... 's3bucket' => [ 'class' => \frostealth\yii2\aws\s3\Storage::className(), 'region' => 'your region', 'credentials' => [ // Aws\Credentials\CredentialsInterface|array|callable 'key' => 'your aws s3 key', 'secret' => 'your aws s3 secret', ], 'bucket' => 'your aws s3 bucket', 'cdnHostname' => 'http://example.cloudfront.net', 'defaultAcl' => \frostealth\yii2\aws\s3\Storage::ACL_PUBLIC_READ, 'debug' => true, // bool|array ], // ... ],
You can also use it with the dependency container:
Yii::$app->container->set('frostealth\yii2\aws\s3\StorageInterface', function () {
return Yii::$app->get('s3bucket');
});
// creating an object
$data = ['one', 'two', 'three'];
Yii::$app->get('s3bucket')->put('path/to/s3object.ext', Json::encode($data));
// uploading an object by streaming the contents of a stream
$resource = fopen('/path/to/local/file.ext', 'r+');
Yii::$app->get('s3bucket')->put('path/to/s3object.ext', $resource);
Yii::$app->get('s3bucket')->upload('path/to/s3object.ext', '/path/to/local/file.ext');
$concurrency = 5;
$minPartSize = 536870912; // 512 MB
$promise = Yii::$app->get('s3bucket')->uploadAsync(
'path/to/s3object.ext',
'/path/to/local/file.ext',
$concurrency,
$minPartSize
);
// block until the result is ready
$promise->wait();
/** @var \Aws\Result $result */
$result = Yii::$app->get('s3bucket')->get('path/to/s3object.ext');
$data = $result['Body'];
Yii::$app->get('s3bucket')->get('path/to/s3object.ext', '/path/to/local/file.ext');
Yii::$app->get('s3bucket')->delete('path/to/s3object.ext');
$url = Yii::$app->get('s3bucket')->getUrl('path/to/s3object.ext');
$url = Yii::$app->get('s3bucket')->getPresignedUrl('path/to/s3object.ext', '+10 minutes');
$url = Yii::$app->get('s3bucket')->getCdnUrl('path/to/s3object.ext');
$result = Yii::$app->get('s3bucket')->getList('path/');
foreach ($result['Contents'] as $object) {
echo $object['Key'] . PHP_EOL;
}