[Aliyun-ACP] 使用云存储OSS的API上传和下载文件
实验概述
实验开始后,系统会自动去创建一台Linux ECS。且ECS实例已经部署了OSS python SDK。用户可以使用OSS Python SDK来访问OSS服务,包括上传文件,下载文件,查看文件列表等。默认这些程序是写在一个脚本文件里,通过Python程序可以执行。OSS上传方式大致可以分为两类:简单上传和分块上传。本实验通过OSS的Python SDK,使用简单上传的方式实现小文件的上传和下载;最后指导您实现如何去删除OSS Bucket。
实验目标
完成此实验后,可以掌握的能力有:
1. 使用OSS python SDK来调用OSS API
2. 掌握OSS简单上传的方式
3. 掌握OSS分块上传的方式
4. 使用OSS python SDK快速删除OSS Object
学前建议
1. 了解Linux的基本命令操作;
2. 了解Python语言的基本使用方法;
1.1 背景知识
阿里云对象存储(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)进行云端的数据处理。
2.3 查看OSS环境
1. 首先,查看本次实验提供的OSS存储环境。请通过云中沙箱 实验资源 提供的方式,点击 前往控制台 。
在跳转的阿里云RAM登录界面,输入本次实验分配的 子用户名称 和 子用户密码。完成后,点击 登录 ,访问阿里云管理控制台。
2. 进入控制台后找到 对象存储OSS ,进入OSS管理控制台。
3. 在OSS管理控制台的概览页面,在下图红框内,找到并点击与 实验资源 提供的 Bucket名称 一致的Bucket名,例如 lab-oss-900hd2 ,进入Bucket的管理页面。
4. 在 文件管理 页面中,进入 实验资源 分配的 Object 路径 ,例如 SL003/u-xxxx ,查看到当前 OSS 的 Object 所在的路径 暂无数据 。
2.4 调用OSS API上传小文件
1. OSS 上传方式分为两类:简单上传和分块上传;其中,简单上传由于不支持断点续传,适合用于上传小文件;而分块上传支持断点续传,适合上传比较大的文件,一般超过100MB 的文件都推荐使用分块上传。 本小节中,使用OSS Python SDK 调用 OSS API,将用户本地的小文件上传到本次实验分配的 Object路径 中。
2. 首先,远程登录到 OSS Python环境 的ECS服务器,请使用本实验提供的ECS服务器的 外网地址 ,用户名 和 密码 。
说明:远程登录Linux系统ECS实例的详细步骤,请参考云中沙箱 帮助文档
3. 登录到 ECS 服务器后,在使用 OSS API 进行文件上传和下载之前,用户需配置阿里云账号的 AccessKeyID, AccessKeySecret 和 Endpoint 信息(均可从 实验资源 获取),以便于通过 OSS 的权限验证。在 ECS 命令行中,使用命令 cd aliyun-lab 进入 aliyun-lab 目录。 然后,使用命令 vim configure.json ,configure.json 文件用于提供调用 OSS API 时所需的公共参数。
按 i 键进入编辑状态, 修改文件中如下的参数信息,完成后,键入 esc 退出编辑状态,并输入vim的编辑命令 :wq ,保存且退出。
id-参数值为本实验中,实验资源 分配的AK ID;
secret-参数值为本实验中,实验资源 分配的AK Secret;
endpoint-参数值为本实验中,实验资源 的“地域”对应的“外网Endpoint”数值。比如:提供的“地域”为“华东 1(杭州)”,则选择“华东 1(杭州)”的“外网Endpoint”。
OSS 地域与外网 Endpoint 的对应关系如下表:
地域 |
外网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 |
4. 完成 OSS 的基本配置信息后,在 aliyun-lab 路径下,执行命令 vim object_upload.py ,修改脚本文件 object_upload.py 。此脚本通过调用 OSS API,上传本地文件 (__file_name:本地文件路径) 到 bucket 中,并重命名 object (__object_name:Bucket中Object名称) 。在代码的 #调用OSS API的put_object()上传文件 下方,添加如下的代码,完成修改后,保存脚本并退出编辑页面。
注意:
with open(__file_name,'rb') as fileobj:
bucket.put_object(__object_name, fileobj)
5. 执行如下命令,运行脚本程序。将本地文件 lab.txt 上传到本实验分配 OSS bucket 的 Object 路径下,并重命名为 lab_object.txt 。
python object_upload.py <oss bucket名称> lab.txt <oss object路径>/lab_object.txt
注意:请删除 <oss bucket名称>,并修改为实验资源分配的OSS Bucket名称 ;删除 <oss object 路径> ,并修改为实验资源分配的OSS Object路径。若没有使用本实验提供的Bucket 或 Object 路径,可能会导致未知错误。
6. 输入命令 cat lab.txt ,查看上传到OSS指定路径的文件内容:Hello first object! 。
7. 返回 OSS 管理控制台,并进入 实验资源 分配的 Bucket 和该 Bucket 的 Object 路径下,点击右上角的 刷新 ,刷新 Object 管理页面。此时,在 Object 径下,查看到通过Python SDK上传的文件 lab_object.txt 。
2.5 调用OSS API下载小文件
1. 在真实的工作环境中,存储在 OSS 环境下的文件资源,可能由于业务需求,需要下载到本地,进行审计等。本小节将介绍如何将 OSS 中的对象文件通过 API 下载到本地服务器。
2. 返回 ECS 服务器访问终端,在 ECS 的 aliyun-lab 目录下,执行命令 vim object_download.py ,修改脚本文件 object_download.py 。此脚本通过调用 OSS API,下载 OSS的 bucket 中名称为 __object_name 的 object 到本地,并重命名为 __local_name 。在代码的 #调用OSS API的get_object_to_file()下载object 下方。添加如下的代码,完成修改后,保存脚本。
bucket.get_object_to_file(__object_name, __local_name)
3. 执行如下命令,将 OSS 存储的文件 lab_object.txt 下载到本地,并重命名为 lab_local.txt 。下载成功后,执行命令 ls ,列出当前目录下所有的文件,可以看到文件lab_local.txt 已经保存在当前目录下。请注意替换 <oss bucket 名称> 和 <oss object路径> 为 实验资源 提供的信息。
python object_download.py <oss bucket 名称> <oss object路径>/lab_object.txt lab_local.txt
4. 执行命令 cat lab_local.txt 和 cat lab.txt ,分别查看原文件与下载后的文件,对比两个文件中的内容,可以发现两个文件中的内容一致,证明 object 下载并成功保存到本地。
2.6 调用OSS API删除Object
1. 在真实的生产环境中,由于 OSS 主要用于存储对象文件等。因此,为了避免大量的垃圾文件存在,建议用户对垃圾资源进行清理,这样不仅可以节约资源也可以节约用户在存储服务中的开销。本小节中,用户将体验如何通过调用OSS API,清理垃圾 Object 资源。
2. 返回ECS服务器访问终端界面,然后,执行 vim object_delete.py ,修改脚本文件 object_delete.py 。此脚本通过调用 OSS API ,删除 OSS Bucket 中的 object。在代码的 #调用OSS API batch_delete_objects(),批量删除objects 下方。添加如下的代码,完成修改后,保存脚本。
result = bucket.batch_delete_objects([__object_name])
执行命令 python object_delete.py <Bucket 名称> <Object路径>/lab_object.txt 。删除 bucket 中的指定路径的 object 。
3. 此时,浏览器返回OSS管理控制台的 Object管理 页面,并点击右上角的 刷新 ,将会看到本次实验提供的 OSS 环境中,没有任何 Object 数据。
4. 至此,完成本实验的全部操作,下一章中将对 OSS 的基础操作进行补充说明。
3.2 创建OSS Bucket
1. 在真实的生产工作环境中,用户在上传或者管理 OSS 中的存储文件之前,首先需要在 OSS 中创建一个 Bucket,也就是 OSS 的存储空间。
说明:本实验仅提供创建的 Python 脚本文件,但不提供实验环境。
2. 在 ECS 服务器访问终端界面中,执行命令: cd aliyun-lab/ ,进入 aliyun-lab/ 目录下。输入命令:vim bucket_create.py ,修改脚本文件 bucket_create.py 。修改创建 bucket 的 python 脚本。用户可以使用此脚本调用OSS 创建Bucket的 API。在代码的 #调用OSS API的create_bucket()创建bucket 下方。添加如下的代码,完成修改后,保存并退出。
result = bucket.create_bucket()
注意:确保插入的代码,与上下文中非注释的代码缩进一致。否则运行脚本时会报错。
执行命令:python bucket_create.py lab ,其中 lab 为用户自定义的 bucket 名称,运行脚本程序,创建一个新的bucket lab-xxxx 。
注意:创建的新bucket名称为:<用户输入的自定义bucket名称>-< Access Key ID信息>。这是由于 OSS bucket 全局唯一,避免bucket名称已存在而导致创建错误,此脚本会自动将 Access KeyID 信息,作为 bucket 名称的后缀。输入 bucket 名称时,必须符合如下的 Bucket 命名规则,否则,无法成功创建 bucket。
3. 访问OSS控制台,可以在页面中看到新建的 bucket。同时,在右侧的页面中显示当前 bucket 里面还没有保存任何数据。
4. 用户不仅可以通过如上的执行脚本的方式创建 Bucket ,也可以通过管理控制台新建 Bucket 。在阿里云 OSS 管理控制台,点击 Bucket 栏右侧的 新建 ,弹出 Bucket 创建对话框。
在弹出的对话框中,输入如下参数信息,完成后,点击 提交 。
BucketName:aliyunlab003
地域:华东2
读写权限:私有
注意:请遵循 Bucket 的命名规则,且 Bucket 名称全局唯一。
3.3 使用OSS管理控制台上传文件
1. 用户不仅可以通过 OSS API 上传本地文件到 OSS 服务指定 Bucket,也可以通过管理控制台上传本地文件到 OSS 指定 Bucket 的目录下。3. 在 OSS 管理控制台的概览页面中,点击与 实验资源 分配的 Bucket名称 相同的 Bucket。例如:实验资源分配的 OSS Bucket名称 为 lab-oss-900hd2 ,则点击 Bucket 栏下的 lab-oss-900hd2 ,找到右侧页面的 文件管理 ,在文件管理页面找到实验文件夹 SL003。
2. 首先,访问OSS管理控制台。点击页面顶部导航栏的 产品与服务,然后,在下拉菜单中,依次选择 云计算基础服务 ---> 存储与CDN ---> 对象存储OSS ,进入OSS管理页面。
3. 在 OSS 管理控制台的概览页面中,点击与 实验资源 分配的 Bucket名称 相同的 Bucket。例如:实验资源分配的 OSS Bucket名称 为 lab-oss-900hd2 ,则点击 Bucket 栏下的 lab-oss-900hd2 ,找到右侧页面的 文件管理 ,在文件管理页面找到实验文件夹 SL003。
在 SL003 的文件夹中,点击云中沙箱分配的 二级Object路径 ,也就是,若用户分配的 Object路径 为 SL003/u-xxx ,则点击 u-xxx ,进入 SL003/u-xxx Object 路径中。
在 Object 管理的列表中,用户可以在第一行中,查看到当前 Object 路径。此时,实验资源 分配的 Object 路径下,没有任何数据。点击 上传文件 ,弹出上传文件的对话框,选择上传文件的本地路径。
点击图片右侧红框内的 直接上传 ,进入本地上传文件路径,然后,选中文件,并点击 打开 。将本地文件上传到 OSS 管理控制台。
说明:点击本节左上角的附件部分,就可以下载本节中使用的图片 黑猫.jpg 。
4. 上传成功后,可以在 文件管理 页面看到该图片。
注意:在网络不稳定或者上传文件较大的情况下,建议学员使用 OSS 断点续传的方式,具体实现方式,请参考自助实验 SL006 使用OSS处理大文件之断点续传 。
3.4 使用OSS管理控制台查看Object文件
1. 完成上传后,用户可以在 OSS 管理控制台查看上传的图片信息。点击黑猫.jpg ,页面右侧弹出预览页面,用户可以查看到上传的图片信息。 若希望其他用户在某个时间段,可以查看图片信息。点击 黑猫.jpg 右侧的 复制url , 默认链接的有效时间为3600秒,用户可以自定义有效时间。
2. 在浏览器中,打开一个空白页面,并将 Object地址 粘贴到地址栏,就可以查看到上传的图片。
3.5 使用OSS管理控制台删除Object文件
1. 用户不仅可以通过调用 OSS API 删除文件,也可以通过 OSS 管理控制台删除 OSS Bucket 中存储的文件。
2. 返回OSS管理控制台,在 Object管理 页面,点击 黑猫.jpg 右侧的 删除 ,弹出删除提示对话框。
在弹出的提示对话框中,点击 确定,则删除 黑猫.jpg 文件。
3. 此时,Object路径下,没有 黑猫.jpg 文件。
3.6 删除OSS Bucket
1. 由于一个阿里云账号最多仅能创建 30 个 Bucket,因此,在真实的生产环境中,若某个 Bucket 不再使用,强烈建议用户删除此 Bucket。但是,在删除此 Bucket 前,请务必清空 Bucket 中的所有 Object 以及 碎片。若 Bucket 不为空,则无法删除 Bucket。本小节将介绍如何通过调用 OSS API 删除一个空的 OSS Bucket。
说明:本实验仅提供删除的Python脚本文件,但不提供实验环境。
2. 在 ECS 服务器访问终端界面中,执行命令:cd aliyun-lab/ ,进入aliyun-lab/目录下,输入命令:vim bucket_delete.py ,修改脚本文件 bucket_delete.py 。修改删除bucket的 python 脚本。用户可以使用此脚本调用 OSS 删除 Bucket的 API。在代码的 #调用delete_bucket()删除bucket 下方。添加如下的代码,完成修改后,保存脚本。
bucket.delete_bucket()
3. 执行命令 python bucket_delete.py <Bucket 名称> ,例如,某空 Bucket 名为 lab-xxxx 。运行结束,提示成功删除 bucket 。
4. 访问阿里云 OSS 管理控制台,并在 概览 页面中,没有上一小节中创建的 Bucket,证明 Bucket 已删除。
5. 用户不仅可以通过调用 API 删除 Bucket,也可以在阿里云 OSS 管理控制台直接删除 Bucket。在 Bucket 列表中,点击删除的 Bucket 右上角的 垃圾桶 图标,弹出删除对话框。
在弹出删除提示对话框中,点击 确定 ,删除 Bucket。
问:在第 2 章第 3 小节 调用OSS API上传小文件 中,执行 python bucket_create.py lab 报错。
答:请检查 configure.json 文件,其中的 id , secret 参数值必须为 实验资源 提供的 AK ID 和 AK Secret ;参数 endpoint 使用的 地域 必须与 实验资源 提供的 地域 相同。若如上配置信息正确,仍旧报错。请发送报错的截图给云中沙箱客服(架构云:培训),届时,会有沙箱的工作人员为您解答问题。