JoseManuelKun / yii2-aws-s3
为 Yii2 的 Amazon S3 组件
v2.1.1
2017-11-30 18:18 UTC
Requires
- php: >=7.0.0
- aws/aws-sdk-php: ~3.17
- yiisoft/yii2: ~2.0
Requires (Dev)
- phpro/grumphp: ~0.8
- squizlabs/php_codesniffer: ~2.3
This package is auto-updated.
Last update: 2024-09-18 00:28:11 UTC
README
为 Yii2 的 Amazon S3 组件。
Yii2 AWS S3 使用 SemVer。
2.x 版本需要 PHP 7。对于小于 7.0 的 PHP,请使用 1.x。
安装
-
运行 Composer 命令安装最新版本
composer require josemanuelkun/yii2-aws-s3 ~2.0
-
将组件添加到
config/main.php
'components' => [ // ... 's3' => [ 'class' => 'josemanuelkun\yii2\aws\s3\Service', 'credentials' => [ // Aws\Credentials\CredentialsInterface|array|callable 'key' => 'my-key', 'secret' => 'my-secret', ], 'region' => 'my-region', 'defaultBucket' => 'my-bucket', 'defaultAcl' => 'public-read', ], // ... ],
基本用法
命令工厂和附加参数的用法
/** @var \josemanuelkun\yii2\aws\s3\Service $s3 */ $s3 = Yii::$app->get('s3'); /** @var \Aws\ResultInterface $result */ $result = $s3->commands()->get('filename.ext')->saveAs('/path/to/local/file.ext')->execute(); $result = $s3->commands()->put('filename.ext', 'body')->withContentType('text/plain')->execute(); $result = $s3->commands()->delete('filename.ext')->execute(); $result = $s3->commands()->upload('filename.ext', '/path/to/local/file.ext')->withAcl('private')->execute(); $result = $s3->commands()->restore('filename.ext', $days = 7)->execute(); $result = $s3->commands()->list('path/')->execute(); /** @var bool $exist */ $exist = $s3->commands()->exist('filename.ext')->execute(); /** @var string $url */ $url = $s3->commands()->getUrl('filename.ext')->execute(); /** @var string $signedUrl */ $signedUrl = $s3->commands()->getPresignedUrl('filename.ext', '+2 days')->execute();
简短语法
/** @var \josemanuelkun\yii2\aws\s3\Service $s3 */ $s3 = Yii::$app->get('s3'); /** @var \Aws\ResultInterface $result */ $result = $s3->get('filename.ext'); $result = $s3->put('filename.ext', 'body'); $result = $s3->delete('filename.ext'); $result = $s3->upload('filename.ext', '/path/to/local/file.ext'); $result = $s3->restore('filename.ext', $days = 7); $result = $s3->list('path/'); /** @var bool $exist */ $exist = $s3->exist('filename.ext'); /** @var string $url */ $url = $s3->getUrl('filename.ext'); /** @var string $signedUrl */ $signedUrl = $s3->getPresignedUrl('filename.ext', '+2 days');
异步执行
/** @var \josemanuelkun\yii2\aws\s3\Service $s3 */ $s3 = Yii::$app->get('s3'); /** @var \GuzzleHttp\Promise\PromiseInterface $promise */ $promise = $s3->commands()->get('filename.ext')->async()->execute(); $promise = $s3->commands()->put('filename.ext', 'body')->async()->execute(); $promise = $s3->commands()->delete('filename.ext')->async()->execute(); $promise = $s3->commands()->upload('filename.ext', 'source')->async()->execute(); $promise = $s3->commands()->list('path/')->async()->execute();
高级用法
/** @var \josemanuelkun\yii2\aws\s3\interfaces\Service $s3 */ $s3 = Yii::$app->get('s3'); /** @var \josemanuelkun\yii2\aws\s3\commands\GetCommand $command */ $command = $s3->create(GetCommand::class); $command->inBucket('my-another-bucket')->byFilename('filename.ext')->saveAs('/path/to/local/file.ext'); /** @var \Aws\ResultInterface $result */ $result = $s3->execute($command); // or async /** @var \GuzzleHttp\Promise\PromiseInterface $promise */ $promise = $s3->execute($command->async());
自定义命令
命令有两种类型:由 PlainCommandHandler
处理的普通命令和具有自己处理器的命令。普通命令包装了原生的 AWS S3 命令。
普通命令必须实现 PlainCommand
接口,其余的必须实现 Command
接口。如果命令没有实现 PlainCommand
接口,它必须有自己的处理器。
每个处理器必须扩展 Handler
类或实现 Handler
接口。处理器在其构造函数中获取 S3Client
实例。
HasBucket
和 HasAcl
接口的实现允许命令构建器默认设置桶和 acl 的值。
要使普通命令异步执行,您必须实现 Asynchronous
接口。您还可以使用 Async
特性来实现此接口。
考虑以下命令
<?php namespace app\components\s3\commands; use josemanuelkun\yii2\aws\s3\base\commands\traits\Options; use josemanuelkun\yii2\aws\s3\interfaces\commands\Command; use josemanuelkun\yii2\aws\s3\interfaces\commands\HasBucket; class MyCommand implements Command, HasBucket { use Options; protected $bucket; protected $something; public function getBucket() { return $this->bucket; } public function inBucket(string $bucket) { $this->bucket = $bucket; return $this; } public function getSomething() { return $this->something; } public function withSomething(string $something) { $this->something = $something; return $this; } }
此命令的处理程序看起来像这样
<?php namespace app\components\s3\handlers; use app\components\s3\commands\MyCommand; use josemanuelkun\yii2\aws\s3\base\handlers\Handler; class MyCommandHandler extends Handler { public function handle(MyCommand $command) { return $this->s3Client->someAction( $command->getBucket(), $command->getSomething(), $command->getOptions() ); } }
使用此命令的方式
/** @var \josemanuelkun\yii2\aws\s3\interfaces\Service */ $s3 = Yii::$app->get('s3'); /** @var \app\components\s3\commands\MyCommand $command */ $command = $s3->create(MyCommand::class); $command->withSomething('some value')->withOption('OptionName', 'value'); /** @var \Aws\ResultInterface $result */ $result = $s3->execute($command);
自定义普通命令看起来像这样
<?php namespace app\components\s3\commands; use josemanuelkun\yii2\aws\s3\interfaces\commands\HasBucket; use josemanuelkun\yii2\aws\s3\interfaces\commands\PlainCommand; class MyPlainCommand implements PlainCommand, HasBucket { protected $args = []; public function getBucket() { return $this->args['Bucket'] ?? ''; } public function inBucket(string $bucket) { $this->args['Bucket'] = $bucket; return $this; } public function getSomething() { return $this->args['something'] ?? ''; } public function withSomething($something) { $this->args['something'] = $something; return $this; } public function getName(): string { return 'AwsS3CommandName'; } public function toArgs(): array { return $this->args; } }
任何命令都可以扩展 ExecutableCommand
类或实现 Executable
接口,这将允许立即执行此命令: $command->withSomething('some value')->execute();
。
许可
Yii2 AWS S3 在 MIT 许可下授权。
有关更多信息,请参阅 LICENSE 文件。