gpt4 book ai didi

python - 尝试使用 Python 列出 IBM Cloud Object Storage 中的对象时出现 "The specified bucket does not exist"

转载 作者:行者123 更新时间:2023-12-05 02:56:05 27 4
gpt4 key购买 nike

正在关注 IBM documentation ,我正在尝试使用 Python 和 ibm-cos-sdk 列出我的 COS 存储桶中的对象。

import ibm_boto3
from ibm_botocore.client import Config, ClientError

cos = ibm_boto3.resource("s3",
ibm_api_key_id=params['API_KEY'],
ibm_service_instance_id=params['COS_TGT_INSTANCE_CRN'],
ibm_auth_endpoint=params['IAM_ENDPOINT'],
config=Config(signature_version="oauth"),
endpoint_url=params['COS_ENDPOINT']
)

for obj in cos.Bucket('sql-efbfb11b-fa01-4c49-8fe1-c70793be3f5f').objects.all():
print(obj.key)

结果是:

ibm_botocore.errorfactory.NoSuchBucket: An error occurred (NoSuchBucket) when calling the ListObjects operation: The specified bucket does not exist.

我很确定这个桶确实存在,因为我可以在输出中清楚地看到它

>>> for b in cos.buckets.all():
... print(b.name)
...
sql-efbfb11b-fa01-4c49-8fe1-c70793be3f5f

我在这里做错了什么?

最佳答案

错误的原因是概念上的。您可以看到所有的桶,但只能获取连接区域中桶的详细信息。我很久以前遇到过这个问题并像这样解决了(当时测试过,不是今天):

def buckets_json():
# Get a list of all bucket names from the response
buckets = [bucket['Name'] for bucket in cos.list_buckets()['Buckets']]
locs2=[{"name":name,"loc":loc} for name,loc in locations(buckets=buckets).iteritems()]
return jsonify(buckets=locs2)

我发现的另一个片段:

def locations(buckets):
locs={}
for b in buckets:
try:
locs[b]=cos.get_bucket_location(Bucket=b)['LocationConstraint']
except:
locs[b]=None
pass
return locs

关于python - 尝试使用 Python 列出 IBM Cloud Object Storage 中的对象时出现 "The specified bucket does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60834454/

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