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

8 php sdk amazon amazon-s3

该函数是否会暂停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);
                    }
Run Code Online (Sandbox Code Playgroud)

dcr*_*cro 12

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

正如AWS文档定义它们:

服务员通过提供一种通过轮询资源等待资源进入特定状态的简单方法,有助于更轻松地使用最终一致的系统.

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

如果服务员在最大尝试次数后无法找到资源,则会抛出异常.

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

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

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

如果putObjectAPI调用已返回成功响应,则该对象最终将显示在S3中,并且您不一定需要在删除本地文件之前等待此操作.