mnapoli / simple-s3
简单、单文件且无依赖的 AWS S3 客户端
1.1.0
2022-11-14 11:04 UTC
Requires (Dev)
- mnapoli/hard-mode: ^0.3
- phpstan/phpstan: ^1
- phpunit/phpunit: ^9
- symfony/filesystem: ^5|^6
- symfony/process: ^5|^6
README
简单、单文件且无依赖的 AWS S3 客户端。
为什么?
在某些场景下,我们想要最简单和最轻量级的 S3 客户端。例如,在 Bref 的运行时核心中,我们不想嵌入完整的 AWS SDK。
如果您需要更多,可以使用官方的 PHP AWS SDK,或者这个出色的替代方案:Async AWS。
安装
此包可以通过 Composer 安装
composer require mnapoli/simple-s3
然而,此包提供保证,所有逻辑都将包含在 src/SimpleS3.php
文件中。如果您想利用这一点,您可以选择以下操作:
- 下载
SimpleS3.php
文件并将其复制到您的应用程序中, - 或者通过 Composer 安装该包,并将
vendor/mnapoli/simple-s3/src/SimpleS3.php
复制到您的应用程序中(最好这样做,因为 Composer 将允许您限制主要版本)。
使用方法
use Mnapoli\SimpleS3; $region = 'us-east-1'; // or whatever region you prefer // Instantiate from AWS credentials in environment variables, for example on AWS Lambda $s3 = SimpleS3::fromEnvironmentVariables($region); $s3->put('my-bucket', '/object.json', json_encode(['hello' => 'world'])); [$status, $objectBody] = $s3->get('my-bucket', '/object.json'); echo $objectBody; $s3->delete('my-bucket', '/object.json');
您还可以通过明确提供 AWS 凭据来实例化该类
$s3 = new SimpleS3($accessKeyId, $secretKey, $sessionToken, $region);
任何错误(400、403、404、500…)都将抛出异常。有时期望一个 404,我们不想得到一个通用的异常:请看下面的 getIfExists()
示例。
注意:此包仅支持 AWS S3 API 的子集(基本上是桶中的 CRUD 文件)。
示例
$s3->get()
如果密钥不存在,将抛出异常。您可以使用 getIfExists()
来获取一个空的 $body
[$status, $body] = $s3->getIfExists('my-bucket', $key); if ($status === 404) { echo 'Not found'; } else { echo $body; }
仅当对象已更改时获取对象
[$status, $body, $responseHeaders] = $s3->get('my-bucket', $key, [ 'If-None-Match' => $previousEtag, ]); if ($status === 304) { echo 'Object up to date!'; } else { $newObjectBody = $body; $newEtag = $responseHeaders['ETag']; }