aklim / yii2-aws-s3
Yii2 的 Amazon S3 组件
v1.0.3
2021-11-14 05:58 UTC
Requires
- php: >=8.0
- aws/aws-sdk-php: 3.*
- yiisoft/yii2: 2.0.*
README
Yii2 的 Amazon S3 组件。
此版本需要 PHP 8.x
关于此项目
此项目允许你在 Yii2 应用程序中与 Amazon S3 服务交互。
安装
-
运行 Composer 命令安装最新版本
composer require aklim/yii2-aws-s3 ~1.0
-
将组件添加到
config/main.php
'components' => [ // ... 'yii_s3' => [ 'class' => 'bpsys\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', 'defaultPresignedExpiration' => '+1 hour', ], // ... ],
凭证参数是可选的:如果你计划使用连接到你的 EC2 实例的 IAM 角色,则不需要凭证。只需删除此参数。如果需要这些凭证,请注意,这可能会在执行过程中导致错误。
基本用法
命令工厂和附加参数的使用
/** @var \bpsys\yii2\aws\s3\Service $s3 */ $s3 = Yii::$app->get('yii_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 \bpsys\yii2\aws\s3\Service $s3 */ $s3 = Yii::$app->get('yii_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'); // Pass only one parameter to get expiration date from component defaults
高级用法
/** @var \bpsys\yii2\aws\s3\interfaces\Service $s3 */ $s3 = Yii::$app->get('yii_s3'); /** @var \bpsys\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());
使用 Traits
将 Trait 附着到具有某些媒体属性并将在 S3 中保存的模型上
class Person extends \yii\db\ActiveRecord { use \bpsys\yii2\aws\s3\traits\S3MediaTrait; // ... }
$image = \yii\web\UploadedFile::getInstance( $formModel, 'my_file_attribute' ); // Save image as my_image.png on S3 at //my_bucket/images/ path // $model->image will hold "my_image.png" after this call finish with success $model->saveUploadedFile( $image, 'image', 'my_image.png' ); // Get the URL to the image on S3 $model->getFileUrl( 'image' ); // Get the presigned URL to the image on S3 // The default duration is "+1 day" $model->getFilePresignedUrl( 'image' ); // Remove the file with named saved on the image attribute // Continuing the example, here "//my_bucket/images/my_image.png" will be deleted from S3 $model->removeFile( 'image' ); // Save my_image.* to S3 on //my_bucket/images/ path // The extension of the file will be determined by the submitted file type // This allows multiple file types upload (png,jpg,gif,...) $model->saveUploadedFile( $image, 'image', 'my_image', true );
许可证
Yii2 AWS S3 根据 MIT 许可证授权。
有关更多信息,请参阅 LICENSE 文件。