是否可以检查存储桶名称是否已存在?
Is it possible to check if a bucket name already exists?
我有一个方法需要一个名称来创建一个新的桶。
如果存储桶名称已经存在,我想显示一条消息 "bucket name already exist"。
是否可以检查存储桶名称是否已经存在?
def createBucket(bucketName):
c = boto.s3.connect_to_region("us-east-1")
# if bucketName exist:
print "bucket name already exist"
else:
bucket = c.create_bucket(bucketName)
bucket = createBucket(raw_input("Bucket name: "))
当每个位置的存储桶名称已被占用时,Amazon Web 服务会给您一个自定义 S3CreateError
异常。
>>> bucket = conn.create_bucket('mybucket')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "boto/connection.py", line 285, in create_bucket
raise S3CreateError(response.status, response.reason)
boto.exception.S3CreateError: S3Error[409]: Conflict
您可以在您的案例中使用该例外。
from boto.exception import S3CreateError
def createBucket(bucketName):
c = boto.s3.connect_to_region("us-east-1")
try:
bucket = c.create_bucket(bucketName)
except S3CreateError:
print "bucket name already exist"
bucket = createBucket(raw_input("Bucket name: "))
lookup 应该可以(虽然我现在不能尝试)。
假设 boto.cfg 已针对区域、安全、访问等进行配置。
from boto.s3.connection import S3Connection
conn = S3Connection()
if conn.lookup('bucketnamehere') is not None:
print('bucket already exists')
如果您的 boto 不支持 conn.lookup,您可能想使用 head 而不是 get(参见:http://boto.readthedocs.org/en/latest/ref/s3.html#module-boto.s3.connection)
try:
conn.head_bucket('bucketnamehere')
except S3ResponseError as error:
print('bucket already exists: {0}'.format(error))
我有同样的问题,但是 a) 使用 boto3
和 b) 我关心“不存在于任何人的帐户中”和“我只是没有访问权限”之间的区别。这就是我发现的似乎有效的方法:
import boto3
list(s3.Bucket("private").objects.all())
# Thank you whoever created that bucket!
# -> throws "An error occurred (AccessDenied)..."
list(s3.Bucket(some_name_that_does_not_exists).objects.all())
# -> throws "An error occurred (NoSuchBucket)..."
我有一个方法需要一个名称来创建一个新的桶。
如果存储桶名称已经存在,我想显示一条消息 "bucket name already exist"。
是否可以检查存储桶名称是否已经存在?
def createBucket(bucketName):
c = boto.s3.connect_to_region("us-east-1")
# if bucketName exist:
print "bucket name already exist"
else:
bucket = c.create_bucket(bucketName)
bucket = createBucket(raw_input("Bucket name: "))
当每个位置的存储桶名称已被占用时,Amazon Web 服务会给您一个自定义 S3CreateError
异常。
>>> bucket = conn.create_bucket('mybucket')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "boto/connection.py", line 285, in create_bucket
raise S3CreateError(response.status, response.reason)
boto.exception.S3CreateError: S3Error[409]: Conflict
您可以在您的案例中使用该例外。
from boto.exception import S3CreateError
def createBucket(bucketName):
c = boto.s3.connect_to_region("us-east-1")
try:
bucket = c.create_bucket(bucketName)
except S3CreateError:
print "bucket name already exist"
bucket = createBucket(raw_input("Bucket name: "))
lookup 应该可以(虽然我现在不能尝试)。
假设 boto.cfg 已针对区域、安全、访问等进行配置。
from boto.s3.connection import S3Connection
conn = S3Connection()
if conn.lookup('bucketnamehere') is not None:
print('bucket already exists')
如果您的 boto 不支持 conn.lookup,您可能想使用 head 而不是 get(参见:http://boto.readthedocs.org/en/latest/ref/s3.html#module-boto.s3.connection)
try:
conn.head_bucket('bucketnamehere')
except S3ResponseError as error:
print('bucket already exists: {0}'.format(error))
我有同样的问题,但是 a) 使用 boto3
和 b) 我关心“不存在于任何人的帐户中”和“我只是没有访问权限”之间的区别。这就是我发现的似乎有效的方法:
import boto3
list(s3.Bucket("private").objects.all())
# Thank you whoever created that bucket!
# -> throws "An error occurred (AccessDenied)..."
list(s3.Bucket(some_name_that_does_not_exists).objects.all())
# -> throws "An error occurred (NoSuchBucket)..."