waitUntilObjectExists() Amazon S3 PHP SDK 方法,它究竟是如何工作的?

Posted

技术标签:

【中文标题】waitUntilObjectExists() Amazon S3 PHP SDK 方法,它究竟是如何工作的?【英文标题】:waitUntilObjectExists() Amazon S3 PHP SDK method, exactly how does it work? 【发布时间】:2013-08-05 15:52:45 【问题描述】:

该函数是否会暂停 php 脚本,直到它在 s3 服务器上找到对象?

我将它放在一个 foreach 循环中,一张一张地上传图片。找到对象后,我调用一个方法在本地删除图像,如果为空则删除本地文件夹。这是一种正确的方法吗?谢谢

                    foreach ($fileNames as $fileName)
                    

                        $imgSize = getimagesize($folderPath . $fileName);

                        $width = (string)$imgSize[0];
                        $height = (string)$imgSize[1];

                        //upload the images
                        $result = $S3->putObject(array(
                            'ACL'        => 'public-read',
                            'Bucket'     => $bucket,
                            'Key'        => $keyPrefix . $fileName,
                            'SourceFile' => $folderPath . $fileName,
                            'Metadata'   => array(
                                'w' => $width,
                                'h' => $height
                            )
                        ));

                        $S3->waitUntilObjectExists(array(
                        'Bucket' => $bucket,
                        'Key' => $keyPrefix . $fileName));

                        $this->deleteStoreDirectory($folderPath, $fileName);
                    

【问题讨论】:

【参考方案1】:

waitUntilObjectExists 基本上是一个等待者,它以特定的时间间隔定期检查(轮询)S3 以查看资源是否可用。脚本的执行被阻止,直到找到资源或达到最大重试次数。

按照 AWS 文档的定义:

Waiters 通过提供一种简单的方法来等待资源通过轮询资源进入特定状态,从而帮助更轻松地使用最终一致的系统。

默认情况下,waitUntilObjectExists 服务员配置为尝试定位资源 20 次,每次尝试之间有 5 秒的延迟。您可以通过将其他参数传递给 waitUntilObjectExists 方法,用您想要的值覆盖这些默认值。

如果服务者在最大尝试次数后仍无法定位资源,则会抛出异常。

您可以在以下网址了解更多关于服务员的信息:

http://docs.aws.amazon.com/aws-sdk-php-2/guide/latest/feature-waiters.html

对于您的用例,我认为在您上传对象后调用waitUntilObjectExists 没有意义,除非相同的 PHP 脚本稍后在代码中尝试从 S3 检索相同的对象。

如果putObject API 调用返回了成功的响应,那么该对象最终会出现在 S3 中,您不必等到这种情况发生后才能删除本地文件。

【讨论】:

正确,除非需要立即访问对象,否则不需要服务员。 就我而言,我确实需要在将对象转移到 S3 存储桶后立即访问它。这种情况下的问题是,有时,当请求对象时,对象会存在于存储桶中,但由于它还没有完成传输,所以我在第一次 getObject 调用时得到不完整的图像,或者在第一次调用时没有全部。

以上是关于waitUntilObjectExists() Amazon S3 PHP SDK 方法,它究竟是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

20170924 a20170924 a

a++和++a的区别

逻辑代数

python运算符

运算符

arraylist排序 例如值 a104,a106,a102,a92,a98,a94 结果a92,a94,a98,a102,a104,a106