2013-08-05 5 views
2

Я хочу проверить, существует ли конкретный ковш, если он не создан.создание ведра, если он еще не существует

мне нужно знать, как я могу обнаружить, если ведро уже существует, используя aws.phar + PHP

Вот псевдокоде

$bucket = 'my-bucket'; 

//some code to detect if bucket name 'my-bucket' exists *suggest here* 
//$myBucketExists = $client->someMethode() 

if(!$myBucketExists){ 

     $result = $client->createBucket(array(
     'Bucket' => $bucket 
    )); 

     // Wait until the bucket is created 
     $client->waitUntil('BucketExists', array('Bucket' => $bucket)); 
} 
// rest of the code using the bucket 

ответ

4

Использование headBucket()

$myBucketExists = $client->headBucket(array('Bucket' => $bucket));

+1

Существует также метод [hasBucketExists()] (http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.Client.html#_doesBucketExist), который использует headBucket. –

+0

с методом headBucket() Мне нужно написать свой код создания нового ведра в блоке catch, поскольку headBucket будет генерировать исключение, если bucket doen't существует. Таким образом, это работает. Спасибо @ Nadh – veer7

+0

делаетBucketExist() работает потрясающе. Даже оба метода работают отлично, я предпочту сделать doBucketExist() лучшей практикой кодирования. Спасибо @Jeremy Lindblom – veer7

1

Попробуйте следующее:

$s3 = $this->awsService->get('S3'); 

if(!$s3->doesBucketExist($bucket)) { 
    $s3->createBucket(array(
     'Bucket' => $bucket 
    )); 
} 
+0

Пожалуйста, добавьте дополнительную информацию к вашему ответу –

+1

Я думаю, что стоит отметить, что hasBucketExist вернет true, если ведро существует в ЛЮБОЙ учетной записи S3, а не только в той, которую вы сейчас используете. Я думаю, что передача false, поскольку второй параметр будет предотвратить 403 ответа, заставляя эту функцию возвращать true. См. Документацию http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html – Carlton

Смежные вопросы