php – 如何将doObjectExist()请求批量处理到Amazon S3?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何将doObjectExist()请求批量处理到Amazon S3?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1913字,纯文字阅读大概需要3分钟。
内容图文
![php – 如何将doObjectExist()请求批量处理到Amazon S3?](/upload/InfoBanner/zyjiaocheng/732/dc01d3068655459fa1abc53fe43ce1c8.jpg)
我需要检查S3中是否存在一组密钥,用于大量项目中的每一个. (每组键与大量项目中的一个相关).
我正在使用PHP SDK(v2)
目前我正在为每个键调用$client-> doesObjectExist(BUCKET,$key),这是一个瓶颈(每次调用到S3的往返时间).
我更喜欢做$client-> doesObjectExist(BUCKET,$batch),其中$batch = array($key1,$key2 … $keyn),并且客户端检查所有这些键然后返回一系列的回应(或一些其他类似的结构).
我遇到了一个few references到一个“批量api”,听起来很有希望,但没有什么具体的.我猜这可能只存在于v1 SDK中.
解决方法:
您可以通过利用底层Guzzle库功能,使用AWS SDK for PHP执行并行请求.由于doesObjectExist方法实际上在该引擎盖下执行HeadObject操作.您可以通过执行以下操作来创建HeadObject命令组:
use Aws\S3\S3Client;
use Guzzle\Service\Exception\CommandTransferException;
function doObjectsExist(S3Client $s3, $bucket, array $objectKeys)
{
$headObjectCommands = array();
foreach ($objectKeys as $key) {
$headObjectCommands[] = $s3->getCommand('HeadObject', array(
'Bucket' => $bucket,
'Key' => $key
));
}
try {
$s3->execute($headObjectCommands); // Executes in parallel
return true;
} catch (CommandTransferException $e) {
return false;
}
}
$s3 = S3Client::factory(array(
'key' => 'your_aws_access_key_id',
'bucket' => 'your_aws_secret_key',
));
$bucket = 'your_bucket_name';
$objectKeys = array('object_key_1', 'object_key_2','object_key_3');
// Returns true only if ALL of the objects exist
echo doObjectsExist($s3, $bucket, $objectKeys) ? 'YES' : 'NO';
如果您想要响应中的数据,除了键是否存在之外,您可以更改try-catch块来执行类似的操作.
try {
$executedCommands = $s3->execute($headObjectCommands);
} catch (CommandTransferException $e) {
$executedCommands = $e->getAllCommands();
}
// Do stuff with the command objects
foreach ($executedCommands as $command) {
$exists = $command->getResponse()->isSuccessful() ? "YES" : "NO";
echo "{$command['Bucket']}/{$command['Key']}: {$exists}\n";
}
AWS SDK for PHP User Guide中提到了并行发送命令,但我也会看一下Guzzle batching documentation.
内容总结
以上是互联网集市为您收集整理的php – 如何将doObjectExist()请求批量处理到Amazon S3?全部内容,希望文章能够帮你解决php – 如何将doObjectExist()请求批量处理到Amazon S3?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。