ibm-cloud - 文件未使用 python 上传到 IBM 云对象存储
问题描述
在 IDLE 中运行代码时,它什么也不显示。
从 ibm_botocore.client 导入配置
导入 ibm_boto3
def upload_file(凭证,local_file_name,key):
cos = ibm_boto3.client(service_name='s3', ibm_api_key_id=credentials['从服务凭证描述中得到'],
ibm_service_instance_id=credentials['从服务凭证描述中得到'],
ibm_auth_endpoint=credentials['s3.eu-gb.cloud-object-storage.appdomain.cloud'],//因为我的地区是伦敦
config=Config(signature_version='oauth'),
endpoint_url=credentials[' https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints '])
尝试:
res=cos.upload_file(Filename='D:\ibm-cloud\get-started-python\abc.txt',
Bucket=credentials['cloud-college-bucket0'],Key=key)
例外为 e:
print(Exception, e)
别的:
print('File Uploaded')
解决方案
您没有提供有效的endpoint_url
. 您从凭据中提取的值将提供有效端点列表,但本身无效。在文档中了解更多信息。
编辑:啊,我明白了。您将正确的端点放在错误的位置。只要拿走你所拥有的ibm_auth_endpoint
并将其用于endpoint_url
. 您实际上可以完全省略授权端点行(SDK 将默认为正确的值),或者您可以使用https://iam.cloud.ibm.com/identity/token
.
尝试这个:
import ibm_boto3
from ibm_botocore.client import Config
cos = ibm_boto3.client(service_name='s3',
ibm_api_key_id='<some API key>',
ibm_service_instance_id='<got from service credential description>',
config=Config(signature_version='oauth'),
endpoint_url='https://s3.eu-gb.cloud-object-storage.appdomain.cloud')
try:
res = cos.upload_file('D:\ibm-cloud\get-started-python\abc.txt',
'cloud-college-bucket0', 'some-key')
except Exception as e:
print(Exception, e)
else:
print('File Uploaded')
推荐阅读
- python - 收集熊猫数据框中特定列值的所有行
- linux - 在 Postgres docker 容器中启动系统服务
- jquery - 带有 CSS 和 Jquery 的多面翻转卡片
- flutter - 如何在 Flutter 中捕获并报告渲染库捕获的异常?
- python - 烧瓶中的身份验证错误登录名或密码
- php - 如何在不使用 artisan 的情况下在远程 ubuntu 服务器上连接 Laravel 7.12 项目的数据库
- r - 根据来自另一个数据框的值向数据框添加一列
- api - Flutter api 重新加载每个导航
- ios - Xcode 测试覆盖率多次显示相同的目标 - 一个总是空的
- mysql - 为什么我不能将自动增量设置为在另一个表中用作外键的字段?