waitUntilObjectExists()AmazonS3 PHP SDK方法,它是如何工作的


waitUntilObjectExists() Amazon S3 PHP SDK method, exactly how does it work?

函数会暂停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);
}

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中,并且在删除本地文件之前不必等待此情况发生。