转移听众 - 适用于 PHP 的 Amazon SDK
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

转移听众

您可以实现自己的侦听器,用于对不同的传输事件做出反应。这些事件是:

  • transferInitiated: 传输启动时

  • bytesTransferred: 当传输将字节从源传输到目标时

  • transferComplete: 当传输完成且没有错误时

  • transferFail: 当传输在完成之前失败时

每个S3TransferManager操作(例如uploadFiledownloadDirectory)都有一个listeners参数。此参数是一个数组,它期望每个项目都是一个实例AbstractTransferListener

AbstractTransferListener是一个抽象基类,你可以扩展它来监视传输操作。它为所有传输事件提供了空方法实现。您只需要重写要处理的事件的方法即可。

每个AbstractTransferListener方法都接收一个$context参数。此参数包含有关操作的键值信息。上下文包括:

  • request_args(数组)-请求参数

  • progress_snapshot(的实例 TransferProgressSnapshot<add link>)-当前请求状态

  • reason(的实例Throwable)-仅为该transferFail方法提供

progress_snapshot属性还包含故障事件的reason属性。您可以通过$context['reason']或通过访问例外$context['progress_snapshot']→getReason()

以下代码显示了AbstractTransferListener类的结构:

<?php namespace Aws\S3\S3Transfer\Progress; abstract class AbstractTransferListener { /** * @param array $context * - request_args: (array) The request arguments that will be provided * as part of the request initialization. * - progress_snapshot: (TransferProgressSnapshot) The transfer snapshot holder. * * @return void */ public function transferInitiated(array $context): void {} /** * @param array $context * - request_args: (array) The request arguments that will be provided * as part of the operation that originated the bytes transferred event. * - progress_snapshot: (TransferProgressSnapshot) The transfer snapshot holder. * * @return void */ public function bytesTransferred(array $context): bool {} /** * @param array $context * - request_args: (array) The request arguments that will be provided * as part of the operation that originated the bytes transferred event. * - progress_snapshot: (TransferProgressSnapshot) The transfer snapshot holder. * * @return void */ public function transferComplete(array $context): void {} /** * @param array $context * - request_args: (array) The request arguments that will be provided * as part of the operation that originated the bytes transferred event. * - progress_snapshot: (TransferProgressSnapshot) The transfer snapshot holder. * - reason: (Throwable) The exception originated by the transfer failure. * * @return void */ public function transferFail(array $context): void {} }

以下示例显示了一个仅重写transferInitiatedtransferFail方法的AbstractTransferListener实现:

<?php namespace MyApp\Listeners; use Aws\S3\S3Transfer\Progress\AbstractTransferListener; class MyCustomListener extends AbstractTransferListener { public function transferInitiated(array $context): void { $progressSnapshot = $context['progress_snapshot']; echo "Transfer initiated for object with identifier: " . $progressSnapshot->getIdentifier(); } public function transferFail(array $context): void { $progressSnapshot = $context['progress_snapshot']; $reason = $context['reason']; echo "Transfer for object with identifier: " . $progressSnapshot->getIdentifier() . " has failed."; echo "Completion Status: " . $progressSnapshot->getTransferredBytes() . "/" . $progressSnapshot->getTotalBytes() . " B"; echo "Reason of failure is: " . $reason; } }
<?php use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\S3TransferManager; use MyApp\Listeners\MyCustomListener; require __DIR__ . '/../vendor/autoload.php'; // The following example uses `MyCustomListener` in an `upload` operation. $transferManager = new S3TransferManager( null, ['default_region' => 'us-east-2'] ); $uploadPromise = $transferManager->upload( new UploadRequest( source: "/tmp/myfile.txt", uploadRequestArgs: [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'MyKey' ], listeners: [ new MyCustomListener() ] ) ); $result = $uploadPromise->wait();