6,公有云实战——使用云存储OSS的API上传和下载文件

2023-04-12

背景知识


阿里云对象存储(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  /lab_object.txt


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



至此,完成本实验的全部操作,下一章中将对 OSS 的基础操作进行补充说明


本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com