ibm_boto3 list_objects在IBM Data Platform Jupyter Notebook中工作,
ibm_boto3 list_objects在本地终端无效。
client.list_objects(Bucket=bucket)
我能够使用print(client)
打印出客户端对象但是,当我尝试list_objects
然后ConnectionRefusedError(61, 'Connection refused'))
发生时。
ibm_botocore connection refused screenshot
在我本地尝试ibm_boto3的原因是因为我想将文件夹从本地上传到IBM Data Platform项目。我的本地文件夹包含很多文件,因此我想使用本地终端的ibm_boto3 sdk轻松上传。
我使用jupyter notebook ipynb文件在IBM Data Platform项目中创建了该文件夹,但是当我在本地终端中测试put_object时,它无效,这与list_objects的情况相同。
如何在本地终端中运行list_object?
我正在使用Python 3.5.2 :: Anaconda 4.3.0 (x86_64)
非常感谢,
答案 0 :(得分:1)
从Notebook插入代码生成的凭据仅适用于您在DSX上创建的项目,因此它仅限于为项目创建的存储桶,并拒绝访问任何其他存储桶。另外我认为*它确保这些凭证只能在DSX上的Notebook中使用。
所以你需要做的是 在DSX中的设置下进入应用和服务
https://dataplatform.ibm.com/settings/services?context=analytics 然后在IBM Cloud中单击“管理您的云对象存储服务”。
或
访问Bluemix.net(IBM Cloud) https://console.bluemix.net/services/ 并找到您的COS服务,然后打开它
然后点击New Credenitals并选择" Manager"作为角色,将它命名为你喜欢的任何东西。
单击“添加”。
现在来自本地机器上的python客户端。 如此描述 https://github.com/IBM/ibm-cos-sdk-python 我们将创建客户端而不是资源。 使用新生成的凭据中的值替换API-KEY,RESOURCE_INSTANCE_ID。(单击查看Credenitals) 同时将bucket-name替换为您想要的存储桶名称。
确保安装
pip install ibm-cos-sdk
from botocore.client import Config
import ibm_boto3
api_key = 'API_KEY'
service_instance_id = 'RESOURCE_INSTANCE_ID'
auth_endpoint = 'https://iam.bluemix.net/oidc/token'
service_endpoint = 'https://s3-api.us-geo.objectstorage.softlayer.net'
cos_client = ibm_boto3.client('s3',
ibm_api_key_id=api_key,
ibm_service_instance_id=service_instance_id,
ibm_auth_endpoint=auth_endpoint,
config=Config(signature_version='oauth'),
endpoint_url=service_endpoint)
cos_client.list_buckets()
cos_client.list_objects(Bucket="bucketname")
谢谢, 查尔斯。