该函数是否会暂停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);
}
答案 0 :(得分: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检索相同的对象。
如果putObject
API调用返回了成功的响应,则该对象最终将显示在S3中,并且您不必在删除本地文件之前等待此操作。