Как интегрировать мой проект Yii 2.0 с Aws?
Я установил его с помощью композитора
"aws/aws-sdk-php": "2.*",
и включил
require '../vendor/aws/aws-autoloader.php';
Но когда я пытаюсь создать экземпляр моего клиента S3, он постоянно говорит мне, что Aws не существует.
Вы можете сослаться на следующую ссылку на GitHub
https://github.com/JDpawar/yii2-aws-s3-sdk
Он содержит точные сведения о том, как использовать S3 SDK вместе с приложением Yii 2.
Это расширение обеспечивает интеграцию AWS SDK 3 для платформы Yii2
Предпочтительный способ установить это расширение через композитор.
Либо беги
php composer.phar требуют —prefer-dist fedemotta / yii2-aws-sdk «*»
или добавить
«fedemotta / yii2-aws-sdk»: «*»
в требуемый раздел вашего composer.json
файл.
Примечание. Вы все еще можете использовать AWS версии 2, если указали fedemotta / yii2-aws-sdk «1. *»
Чтобы использовать это расширение, просто добавьте следующий код в конфигурацию вашего приложения:
<?php
return [
//....
'components' => [
'awssdk' => [
'class' => 'fedemotta\awssdk\AwsSdk',
'credentials' => [ //you can use a different method to grant access
'key' => 'your-aws-key',
'secret' => 'your-aws-secret',
],
'region' => 'your-aws-region', //i.e.: 'us-east-1'
'version' => 'your-aws-version', //i.e.: 'latest'
],
],
];
?>
Получение всех имен балансировщиков из AWS:
<?php
$aws = Yii::$app->awssdk->getAwsSdk();
$elb = $aws->createElasticloadbalancing();
$load_balancers = $elb->describeLoadBalancers()->toArray();
if (isset($load_balancers['LoadBalancerDescriptions'])){
foreach ($load_balancers['LoadBalancerDescriptions'] as $balancer){
if (isset($balancer['LoadBalancerName'])){
echo $balancer['LoadBalancerName'];
}
}
}
?>
Загрузите объект из S3:
<?php
//specify the region if it is different than the main configuration region
Yii::$app->awssdk->region = 'sa-east-1';
$aws = Yii::$app->awssdk->getAwsSdk();
//use s3
$s3 = $aws->createS3();
$result = $s3->listObjects(['Bucket' => 'your-bucket-id',
"Prefix" => "your-path"])->toArray();
//get the last object from s3
$object = end($result['Contents']);
$key = $object['Key'];
$file = $s3->getObject([
'Bucket' => 'your-bucket-id',
'Key' => $key
]);
//download the file
header('Content-Type: ' . $file['ContentType']);
echo $file['Body'];
?>
Запустите команду Composer для установки расширения s3. композитор требует frostealth / yii2-aws-s3 ~ 1.0.0@stable
Open common/config/main.php file and add below code into "components" section. "s3bucket" => [ "class" => \frostealth\yii2\aws\s3\Storage::className(), "region" => "Your region", "credentials" => [ "key" => "your aws s3 key", "secret" => "your aws s3 secret", ], "bucket" => "your aws s3 bucket", "defaultAcl" => \frostealth\yii2\aws\s3\Storage::ACL_PUBLIC_READ, "debug" => false, // bool|array ],
Use below code to upload image on s3 $s3 = Yii::$app->get('s3bucket')->upload('upload image name', 'path of local folder where image located');
After uploading you get status code and image url. you can get like below $status = $s3["@metadata"]["statusCode"]; $imageUrl = $s3["@metadata"]["effectiveUri"];
Я повторно импортирую свое расширение, используя композитор,
и добавление
require (\Yii::getAlias('@vendor/autoload.php'));
Каким-то образом я заработал, добавив «автозагрузку» в json composer
"autoload": {
"psr-4": {
"vendor\\aws\\" :""}
}
а потом беги
php composer.phar dumpautoload