Предположительно с использованием подстановочного знака * означает, что вы хотите удалить все объекты сразу, а не по одному за раз?
Это возможно с помощью delete_all_objects ($ bucket, $ pcre) , где $pcre
- необязательное Perl-совместимое регулярное выражение (PCRE) для фильтрации имен по (по умолчанию PCRE_ALL
("/.*/i"
), например:
$s3 = new AmazonS3();
$response = $s3->delete_all_objects($bucket, "#myDirectory/.*#");
Я выбрал #
вместо обычного /
в качестве шаблона, заключающего в себя разделитель, чтобы избежать экранирования (здесь нет проблем с одиночной косой чертой, но в более сложных случаях это довольно быстро), см. Разделители для деталей.
Замечание по реализации
Обратите внимание, что удаление нескольких объектов в прошлом было невозможно на уровне API Amazon S3 и имитировалось в AWS SDK для PHP с циклом for в delete_all_objects()
, то есть использовалось еще один запрос на объект; К счастью, Amazon наконец-то представила Amazon S3 - удаление нескольких объектов в декабре 2011 года:
Amazon S3 новый Multi-Object Delete дает вам возможность
удалить до 1000 объектов из корзины S3 за один запрос.
Поддержка S3 Multi Object Delete была добавлена в AWS SDK для PHP вскоре после этого соответственно, см. AWS SDK для PHP 1.4.8 "Zanarkand" :
Класс 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'),
)
));