ssigwart/aws-high-availability-s3

一个用于实现高可用性S3调用的库。

v1.0.1 2023-11-26 19:13 UTC

This package is auto-updated.

Last update: 2024-09-26 21:00:34 UTC


README

此库使得以高可用性写入S3文件变得容易。它包含以下功能:

  • 将S3文件上传到第一个成功的位置。
  • 下载位于多个位置可用的S3文件。

用法

API需要您传递一个\Aws\Sdk对象。在下面的示例中,使用$awsSdk表示此对象。

上传文件

  1. 创建一个可用的上传位置列表。
    • 这是一个S3AvailableUploadFileBucketAndKeyLocations对象。
    • 您可以将实现了S3FileBucketAndKeyProviderInterface接口的任何内容添加到位置列表中。
    • 最简单的选项是使用S3FileBucketAndKey,它实现了此接口。
  2. 设置S3UploadFileMetadata,为要上传的文件提供元数据。
  3. 创建一个AwsHighAvailabilityS3Uploader对象并调用uploadFileToS3
    • 您可以使用AwsHighAvailabilityS3UploaderErrorHandlerInterface配置上传器来自定义失败处理。例如,您可能想用它来记录异常,或者如果您想停止尝试其他位置,则可以抛出异常。
// Set up possible locations
$primaryLocation = new S3FileBucketAndKey('us-east-1', 'phpunit-test-us-east-1', 'us-east-1/path/to/file.txt');
$backupLocation = new S3FileBucketAndKey('us-west-1', 'phpunit-test-us-west-1', 'us-west-1/path/to/file.txt');
$locations = new S3AvailableUploadFileBucketAndKeyLocations($primaryLocation);
$locations->addAlternativeLocation($backupLocation);

// Set up meta data
$metadata = new S3UploadFileMetadata();

// Upload
$s3Uploader = new AwsHighAvailabilityS3Uploader($awsSdk);
$finalLocation = $s3Uploader->uploadFileToS3($locations, 'File contents.', 'text/plain', $metadata);

下载文件

  1. 创建一个可用的下载位置列表。
    • 这是一个S3AvailableDownloadFileBucketAndKeyLocations对象。
    • 您可以将实现了S3FileBucketAndKeyProviderInterface接口的任何内容添加到位置列表中。
    • 最简单的选项是使用S3FileBucketAndKey,它实现了此接口。
  2. 创建一个AwsHighAvailabilityS3Downloader对象并调用downloadFileFromS3
    • 您可以使用AwsHighAvailabilityS3DownloaderErrorHandlerInterface配置下载器来自定义失败处理。例如,您可能想用它来记录异常,或者如果您想停止尝试其他位置,则可以抛出异常。
// Set up possible locations
$primaryLocation = new S3FileBucketAndKey('us-east-1', 'phpunit-test-us-east-1', 'us-east-1/path/to/file.txt');
$backupLocation = new S3FileBucketAndKey('us-west-1', 'phpunit-test-us-west-1', 'us-west-1/path/to/file.txt');
$locations = new S3AvailableDownloadFileBucketAndKeyLocations($primaryLocation);
$locations->addAlternativeLocation($backupLocation);

// Download
$s3Downloader = new AwsHighAvailabilityS3Downloader($awsSdk);
$contents = $s3Downloader->downloadFileFromS3($locations);

S3UploadFileMetadata选项

S3UploadFileMetadata类允许您自定义以下内容:

  • S3存储类别。
  • S3 ACL(公共与私有)。
  • 公共对象的缓存TTL。