gpt4 book ai didi

php - 使用 api php 使用通配符从 S3 中删除

转载 作者:行者123 更新时间:2023-12-04 21:51:23 26 4
gpt4 key购买 nike

我有这个工作代码可以从 s3 中删除文件和文件夹。您将如何使用通配符 * 进行删除?

$s3 = new AmazonS3();

$bucket = 'mybucket';
$folder = 'myDirectory/*';// this doesnt work

$response = $s3->get_object_list($bucket, array(
'prefix' => $folder
));

foreach ($response as $v) {
$s3->delete_object($bucket, $v);
}

最佳答案

大概使用通配符 * 意味着您想一次删除所有对象而不是一次删除一个对象?

这可以通过 delete_all_objects($bucket, $pcre) 实现,其中 $pcre 是可选的 Perl 兼容正则表达式 (PCRE),用于过滤名称(默认为 PCRE_ALL,即 "/.*/i"),例如:

$s3 = new AmazonS3();
$response = $s3->delete_all_objects($bucket, "#myDirectory/.*#");

我选择了 # 而不是通常的 / 作为包含定界符的模式以避免转义(这里的单斜杠不是问题,但很快就会变得困惑对于更复杂的情况),请参阅 Delimiters了解详情。


实现说明

请注意,过去无法在 Amazon S3 API 级别删除多个对象,并在 AWS SDK for PHP 中进行了模拟。在 delete_all_objects() 中也有一个 for 循环,即它仍然对每个对象使用一个请求;幸运的是,亚马逊终于推出了Amazon S3 - Multi-Object Delete 2011 年 12 月:

Amazon S3's new Multi-Object Delete gives you the ability to delete up to 1000 objects from an S3 bucket with a single request.

S3 多对象删除 的支持已相应地添加到 适用于 PHP 的 AWS SDK 中,请参阅 AWS SDK for PHP 1.4.8 "Zanarkand" :

The AmazonS3 class now allows you to delete multiple Amazon S3 objects using a single HTTP request. This has been exposed as the delete_objects() method, and the delete_all_objects() and delete_all_object_versions() methods have been rewritten to leverage this new Amazon S3 feature.

还显示了专用多对象删除(即没有通配符)的示例:

$s3 = new AmazonS3();
$response = $s3->delete_objects($bucket, array(
'objects' => array(
array('Key' => 'file1.txt'),
array('Key' => 'file2.txt'),
)
));

关于php - 使用 api php 使用通配符从 S3 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com