Удалить папку в Amazon S3 с помощью PHP - PullRequest
7 голосов
/ 11 марта 2012

Я только начал пробовать Amazon S3 для размещения изображений моего сайта.Я использую официальную библиотеку Amazon AWS PHP SDK.

Проблема: Как удалить все файлы, находящиеся в папке S3?
Например, если у меня есть файлс именем images/2012/photo.jpg, я хочу удалить все файлы, имена файлов которых начинаются с images/2012/.

Ответы [ 4 ]

17 голосов
/ 14 апреля 2015

Лучший способ удалить папку из S3 со всеми ее файлами - использовать API deleteMatchingObjects()

$s3 = S3Client::factory(...);
$s3->deleteMatchingObjects('YOUR_BUCKET_NAME', '/some/dir');
10 голосов
/ 11 марта 2012

S3 не имеет «папок», как вы обычно думаете о них в файловой системе (некоторые клиенты S3 просто делают хорошую работу, заставляя S3 показывать , чтобы иметь папки). Эти / на самом деле являются частью имени файла.

Таким образом, в API нет опции «удалить папку». Вам просто нужно удалить каждый отдельный файл с префиксом images/2012/....

Обновление:

Это можно сделать с помощью метода delete_all_objects в PHP-клиенте Amazon S3. Просто укажите "/^images\/2012\//" в качестве префикса регулярного выражения во втором аргументе (первый аргумент является именем вашего сегмента).

0 голосов
/ 28 мая 2019

Я проверил это, и оно работает 2019-05-28

function Amazon_s3_delete_dir($delPath, $s3, $bucket) {
//the $dir is the path to the directory including the directory
// the directories need to have a / at the end.  
// Clear it just in case it may or may not be there and then add it back in.
$dir = rtrim($dir, "/");
$dir = ltrim($dir, "/");
$dir = $dir . "/";

$response = $s3->getIterator(
        'ListObjects',
        [
            'Bucket' => $bucket,
            'Prefix' => $delPath
        ]
);
//delete each 
foreach ($response as $object) {
    $fileName = $object['Key'];
    $s3->deleteObject([
        'Bucket' => $bucket,
        'Key' => $fileName
    ]);
}//foreach

    return true;
 }//function

Использование:

$delPath = $myDir . $theFolderName . "/";        
Amazon_s3_delete_dir($delPath, $s3, $bucket);
0 голосов
/ 12 марта 2012

Вот функция, которая будет делать то, что вы хотите сделать.

/**
*   This function will delete a directory.  It first needs to look up all objects with the specified directory
*   and then delete the objects.
*/
function Amazon_s3_delete_dir($dir){
    $s3 = new AmazonS3();

    //the $dir is the path to the directory including the directory

    // the directories need to have a / at the end.  
    // Clear it just in case it may or may not be there and then add it back in.
            $dir = rtrim($dir, "/");
            $dir = ltrim($dir, "/");
            $dir = $dir . "/";

    //get list of directories
        $response = $s3->get_object_list(YOUR_A3_BUCKET, array(
           'prefix' => $dir
        ));


    //delete each 
        foreach ($response as $v) {
            $s3->delete_object(YOUR_A3_BUCKET, $v);
        }//foreach

    return true;

}//function

Использование: если я хочу удалить каталог foo

Amazon_s3_delete_dir("path/to/directory/foo/");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...