想必使用通配符 *意味着您想一次删除所有对象而不是一次删除一个对象?
这可以通过删除所有对象($bucket,$pcre) http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=AmazonS3/delete_all_objects, where $pcre
是一个可选的用于过滤名称的 Perl 兼容正则表达式 (PCRE)(默认为PCRE_ALL
,即"/.*/i"
), e.g.:
$s3 = new AmazonS3();
$response = $s3->delete_all_objects($bucket, "#myDirectory/.*#");
我选择了#
而不是平常的/
作为包围定界符以避免转义的模式(这里的单斜杠不是问题,但对于更复杂的情况,它很快就会变得混乱),请参阅分隔符 http://www.php.net/manual/en/regexp.reference.delimiters.php了解详情。
实施说明
请注意,过去在 Amazon S3 API 级别删除多个对象是不可能的,并且在适用于 PHP 的 AWS 开发工具包 http://aws.amazon.com/sdkforphp/里面有一个 for 循环delete_all_objects()
同样,即它仍然对每个对象使用一个请求;幸运的是,亚马逊终于推出了Amazon S3 - 多对象删除 http://aws.amazon.com/s3/faqs/#How_can_I_delete_large_numbers_of_objects2011 年 12 月:
亚马逊 S3 http://aws.amazon.com/s3新的多对象删除使您能够
通过单个请求从 S3 存储桶中删除最多 1000 个对象。
支持S3 多对象删除已添加到适用于 PHP 的 AWS 开发工具包此后不久,相应地,参见适用于 PHP 1.4.8“Zanarkand”的 AWS 开发工具包 http://aws.amazon.com/releasenotes/2917833986024270:
AmazonS3 类现在允许您删除多个 Amazon S3 对象
使用单个 HTTP 请求。这已被曝光为
delete_objects() 方法、delete_all_objects() 和
delete_all_object_versions() 方法已被重写以利用这一新的 Amazon S3 功能。
还显示了专用多对象删除(即没有通配符)的示例:
$s3 = new AmazonS3();
$response = $s3->delete_objects($bucket, array(
'objects' => array(
array('Key' => 'file1.txt'),
array('Key' => 'file2.txt'),
)
));