mnapoli/simple-s3

简单、单文件且无依赖的 AWS S3 客户端

维护者

详细信息

github.com/mnapoli/simple-s3

源代码

资助包维护!
mnapoli

1.1.0 2022-11-14 11:04 UTC

This package is auto-updated.

Last update: 2024-09-14 15:00:55 UTC


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'];
}