6,公有云实战——使用云存储OSS的API上传和下载文件
背景知识
阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。使用 OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种结构化或非结构化数据文件。以下的术语为OSS相关的基本概念:
Bucket,是一个用户用来管理所存储Object的存储空间。 每个用户可以拥有多个Bucket。Bucket的名称在OSS的范围内必须是全局唯一的,一旦创建之后无法修改名称。Bucket内部的Object数目是没有限制的。
Object,是OSS存储数据的基本单元,称为OSS的对象,也被称为OSS的文件。根据不同的上传方式,Object的大小限制是不一样的。Object由元信息(Object Meta),用户数据(Data)和文件名(Key)组成。Object由一个在Bucket内部唯一的Key来标示。Object操作在OSS上具有原子性,操作要么成功要么失败,不会存在有中间状态的Object。OSS保证用户一旦上传完成之后读到的Object是完整的,OSS不会返回给用户一个只上传成功了部分的Object。分片上传最大支持48.8TB的Object,其他的上传方式最大支持5GB。
Region,表示OSS的数据中心所在的区域,物理位置。 一旦指定之后就不允许更改,该Bucket下所有的Object都存储在对应的数据中心。
Endpoint,表示OSS对外服务的访问域名。OSS以HTTP REST API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。
用户可以通过调用API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过阿里云Web控制台对数据进行简单的管理。目前阿里云OSS支持如下几种语言版本的SDK调用API:Python SDK,Java SDK,Android SDK,iOS SDK,JavaScript SDK,.NET SDK,PHP SDK,Ruby SDK,C SDK,Go SDK,Media-C SDK。本实验中主要介绍如何使用Python SDK调用OSS API实现文件的简单上传,下载和删除等操作。
OSS作为对象存储提供商,常用的使用场景如下:
适用于图片、音视频、日志等海量文件的存储,支持各种终端设备,Web网站程序和移动应用直接向OSS写入或读取数据,支持 流式写入 和 文件写入 两种方式。

开发者不仅可以直接使用OSS,利用BGP带宽,实现超低延时的数据直接下载;OSS也可以配合阿里云CDN加速服务,为图片、音视频、移动应用更新分发,提供最佳体验等场景。

上传文件到OSS后,可以配合媒体转码服务(MTS),图片处理服务(IMG)进行云端的数据处理。

实验详情
实验资源:

1,查看列表信息
进行子账号登录:


进入控制台后找到 对象存储OSS ,进入OSS管理控制台:

在OSS管理控制台的概览页面,在下图红框内,找到并点击与 实验资源 提供的 Bucket名称 一致的Bucket名

例如 lab-oss-899hd2 ,进入Bucket的管理页面。如果有重名bucket则注意是否地域有误,实验中的地域为华东2(上海)

在 文件列表 页面中,进入 实验资源 分配的 Object 路径 ,例如 SL003/u-xxxx ,查看到当前 OSS 的 Object 所在的路径 暂无数据 :


2,调用OSS API上传小文件
OSS 上传方式分为两类:简单上传和分块上传;
其中,简单上传由于不支持断点续传,适合用于上传小文件;
而分块上传支持断点续传,适合上传比较大的文件,一般超过100MB 的文件都推荐使用分块上传。
本小节中,使用OSS Python SDK 调用 OSS API,将用户本地的小文件上传到本次实验分配的 Object路径 中。
首先,远程登录到 OSS Python环境 的ECS服务器,请使用本实验提供的ECS服务器的 弹性IP ,用户名 和 密码 :

登录到 ECS 服务器后,在使用 OSS API 进行文件上传和下载之前:
用户需配置阿里云账号的 AccessKeyID, AccessKeySecret 和 Endpoint 信息(均可从 实验资源 获取)
以便于通过 OSS 的权限验证
使用命令 cd aliyun-lab 进入 aliyun-lab 目录。 然后,使用命令 vim configure.json ,
configure.json 文件用于提供调用 OSS API 时所需的公共参数。
cd aliyun-lab
vim configure.json
id-参数值为本实验中,实验资源 分配的AK ID;
secret-参数值为本实验中,实验资源 分配的AK Secret;
endpoint-参数值为本实验中,实验资源 的“地域”对应的“外网Endpoint”数值。
比如:提供的“地域”为“华东 1(杭州)”,则选择“华东 1(杭州)”的“外网Endpoint”。
OSS 地域与外网 Endpoint 的对应关系如下表:
| 华东 1 (杭州) | oss-cn-hangzhou.aliyuncs.com |
| ------------- | ---------------------------- |
| 华东 2 (上海) | oss-cn-shanghai.aliyuncs.com |
| 华北 1 (青岛) | oss-cn-qingdao.aliyuncs.com |
| 华北 2 (北京) | oss-cn-beijing.aliyuncs.com |
| 华南 1 (深圳) | oss-cn-shenzhen.aliyuncs.com |

完成 OSS 的基本配置信息后,在 aliyun-lab 路径下,执行命令 vim object_upload.py 进行修改脚本文件,此脚本通过调用 OSS API,上传本地文件 (__file_name:本地文件路径) 到 bucket 中,并重命名 object (__object_name:Bucket中Object名称) 。在代码的 #调用OSS API的put_object()上传文件 下方,添加如下的代码,完成修改后,保存脚本并退出编辑页面。
vim object_upload.py
# 添加
with open(__file_name,'rb') as fileobj:
bucket.put_object(__object_name, fileobj)

执行如下命令,运行脚本程序。
将本地文件 lab.txt 上传到本实验分配 OSS bucket 的 Object 路径下,并重命名为 lab_object.txt 。
python object_upload.py lab.txt /lab_object.txt
注意:请删除 ,并修改为实验资源分配的OSS Bucket名称
删除 ,并修改为实验资源分配的OSS Object路径。
若没有使用本实验提供的Bucket 或 Object 路径,可能会导致未知错误。

输入命令 cat lab.txt ,查看上传到OSS指定路径的文件内容:Hello first object!

返回 OSS 管理控制台,并进入 实验资源 分配的 Bucket 和该 Bucket 的 Object 路径下,点击右上角的 刷新 ,刷新 Object 管理页面。此时,在 Object 径下,查看到通过Python SDK上传的文件 lab_object.txt

3,调用OSS API下载小文件
在真实的工作环境中,存储在 OSS 环境下的文件资源,可能由于业务需求,需要下载到本地,进行审计等。
本小节将介绍如何将 OSS 中的对象文件通过 API 下载到本地服务器。
返回 终端,在 ECS 的 aliyun-lab 目录下,执行命令 vim object_download.py ,修改此脚本文件 。
此脚本通过调用 OSS API,下载 OSS的 bucket 中名称为 object_name 的 object 到本地,并重命名为 local_name 。
在代码的 #调用OSS API的get_object_to_file()下载object 下方。添加如下的代码,完成修改后,保存脚本。
vim object_download.py
# 添加
bucket.get_object_to_file(__object_name, __local_name)

执行如下命令,将 OSS 存储的文件 lab_object.txt 下载到本地,并重命名为 lab_local.txt 。
下载成功后,执行命令 ls ,列出当前目录下所有的文件,可以看到文件lab_local.txt 已经保存在当前目录下。
请注意替换
python object_download.py /lab_object.txt lab_local.txt

执行命令 cat lab_local.txt 和 cat lab.txt ,分别查看原文件与下载后的文件,对比两个文件中的内容,可以发现两个文件中的内容一致,证明 object 下载并成功保存到本地。

4,调用OSS API删除Object
在真实的生产环境中,由于 OSS 主要用于存储对象文件等。
因此,为了避免大量的垃圾文件存在,建议用户对垃圾资源进行清理,这样不仅可以节约资源也可以节约用户在存储服务中的开销。
本小节中,用户将体验如何通过调用OSS API,清理垃圾 Object 资源。
返回ECS服务器访问终端界面,然后,执行 vim object_delete.py ,修改此脚本文件 。
此脚本通过调用 OSS API ,删除 OSS Bucket 中的 object。
在代码的 #调用OSS API batch_delete_objects(),批量删除objects 下方。添加如下的代码,完成修改后,保存脚本。
vim object_delete.py
# 添加
result = bucket.batch_delete_objects([__object_name])

执行命令 删除 bucket 中的指定路径的 object
python object_delete.py

此时,浏览器返回OSS管理控制台的 文件列表 页面,并点击右上角的 刷新 ,将会看到本次实验提供的 OSS 环境中,没有任何 Object 数据。

至此,完成本实验的全部操作,下一章中将对 OSS 的基础操作进行补充说明
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com



