阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。本文记录阿里云 OSS API 相关内容和使用方法。
简介
阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。
资源术语
| 中文 |
英文 |
说明 |
| 存储空间 |
Bucket |
存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。 |
| 对象/文件 |
Object |
对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由元数据(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。 |
| 地域 |
Region |
地域表示OSS的数据中心所在物理位置。您可以根据费用、请求来源等综合选择数据存储的地域。详情请查看OSS已经开通的Region。 |
| 访问域名 |
Endpoint |
Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同地域的时候,需要不同的域名。通过内网和外网访问同一个地域所需要的域名也是不同的。具体的内容请参见各个Region对应的Endpoint。 |
| 访问密钥 |
AccessKey |
AccessKey,简称AK,指的是访问身份验证中用到的AccessKeyId和AccessKeySecret。OSS通过使用AccessKeyId和AccessKeySecret对称加密的方法来验证某个请求的发送者身份。AccessKeyId用于标识用户,AccessKeySecret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,其中AccessKeySecret 必须保密。 |
AccessKey
使用 API 操作 OSS 对象中的内容,需要有可以访问该 OSS 的 AccessKey
帮助文档:
- https://www.aliyun.com/search?k=OSS_ACCESS_KEY_ID&scene=all
- https://help.aliyun.com/zh/oss/developer-reference/python-configuration-access-credentials?spm=a2c4g.11186623.0.i18#62702a04feflz
创建用户
可以以主帐号的身份创建 AccessKey,但是可能比较危险,建议使用子帐号创建 AccessKey
在阿里云 用户管理 页面中创建一个用户,为用户添加 OSS 管理权限:

创建 AccessKey
点击用户名进入该用户界面,创建 AccessKey:

注意: 该 Key 仅在创建完成的一瞬间展示给用户,之后无法访问 AccessKey,如果不慎遗失,可以创建新的替换原来的
环境配置
将创建好的 AccessKey 添加到系统环境变量中:
1 2
| OSS_ACCESS_KEY_ID OSS_ACCESS_KEY_SECRET
|
API示例
这里以 Python 语言为例,列举部分阿里云 OSS API 的使用方法
Python API 环境配置
执行以下命令安装最新版本的OSS Python SDK。
列举存储空间
存储空间(Bucket)是用来存储对象(Object)的容器。对象都隶属于存储空间。存储空间按照字母顺序排列。您可以列举当前账号所有地域下符合指定条件的存储空间。
1 2 3 4 5 6 7 8 9 10 11 12
| # -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 service = oss2.Service(auth, 'https://oss-cn-hangzhou.aliyuncs.com') # 列举当前账号所有地域下的存储空间。 for b in oss2.BucketIterator(service): print(b.name)
|
以下代码不支持列举指定地域的存储空间。例如,您在代码中填写的Bucket所在地域为华东1(杭州),则依然会列举您的阿里云账号下所有地域的存储空间。
上传文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| # -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以上海为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # yourBucketName填写存储空间名称。 bucket = oss2.Bucket(auth, 'https://oss-cn-shanghai.aliyuncs.com', 'bucket-name')# 上传文件到OSS。 # yourObjectName由包含文件后缀,不包含Bucket名称组成的Object完整路径,例如abc/efg/123.jpg。 # yourLocalFile由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。 bucket.put_object_from_file('abc/efg/123.jpg', '/users/local/myfile.txt')
|
下载文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以上海为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # yourBucketName填写存储空间名称。 bucket = oss2.Bucket(auth, 'https://oss-cn-shanghai.aliyuncs.com', 'bucket-name') #下载OSS文件到本地文件。 # yourObjectName由包含文件后缀,不包含Bucket名称组成的Object完整路径,例如abc/efg/123.jpg。 # yourLocalFile由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。 bucket.get_object_to_file('yourObjectName', 'yourLocalFile')
|
列举文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from itertools import islice# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # yourBucketName填写存储空间名称。 bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName') # oss2.ObjectIterator用于遍历文件。 for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key)
|
删除文件
1 2 3 4 5 6 7 8 9 10 11 12
| # -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 # yourBucketName填写存储空间名称。 bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName') # yourObjectName表示删除OSS文件时需要指定包含文件后缀,不包含Bucket名称在内的完整路径,例如abc/efg/123.jpg。 bucket.delete_object('yourObjectName')
|
官方文档
更多 API 信息参考 :https://help.aliyun.com/zh/oss/developer-reference/python/?spm=a2c4g.11186623.0.0.34fe7ecfdEsn4F
总体来说 阿里是真的强,功能强大、文档翔实、使用方便、安全可靠。
参考资料
文章链接:
https://www.zywvvd.com/notes/environment/cloud/ali-cloud-oss-api/ali-cloud-oss-api/