华为云中对象存储服务软件开发工具包(OBS SDK) C语言介绍

华为云的OBS介绍:摘自华为云官网:https://support.huaweicloud.com/obs/index.html

华为云的对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务 ,为客户提供海量、安全、高可靠、低成本的数据存储能力。

OBS系统和单个桶都没有总数据容量和对象/文件数量的限制 ,为用户提供了超大存储容量的能力,适合存放任意类型的文件 ,适合普通用户、网站、企业和开发者使用。OBS是一项面向Internet访问的服务,提供了基于HTTP/HTTPS协议的Web服务接口,用户可以随时随地连接到Internet,通过OBS管理控制台或各种OBS工具访问和管理存储在OBS中的数据。此外,OBS支持SDK和OBS API接口,可使用户方便管理自己存储在OBS上的数据,以及开发多种类型的上层业务应用。

OBS的基本组成是桶和对象 :

1.桶(Bucket)是OBS中存储对象的容器 。对象存储提供了基于桶和对象的扁平化存储方式,桶中的所有对象都处于同一逻辑层级,去除了文件系统中的多层级树形目录结构。用户在互联网上通过桶的访问域名来定位桶。

每个桶都有自己的存储类别、访问权限、所属区域等属性 ,用户可以在不同区域创建不同存储类别和访问权限的桶,并配置更多高级属性来满足不同场景的存储诉求。

对象存储服务设置有四类桶存储类别,分别为:标准存储、低频访问存储、归档存储、深度归档存储(受限公测中),从而满足客户业务对存储性能、成本的不同诉求。创建桶时可以指定桶的存储类别,桶的存储类别可以修改。

在OBS中,桶名必须是全局唯一的且不能修改 ,即用户创建的桶不能与自己已创建的其他桶名称相同,也不能与同帐号、其他帐号及帐号下的所有IAM(Identity and Access Management, 统一身份认证服务)用户创建的桶名称相同。桶所属的区域在创建后也不能修改 。每个桶在创建时都会生成默认的桶ACL(Access Control List,访问控制列表),桶ACL的每项包含了对被授权用户授予什么样的权限,如读取权限、写入权限等。用户只有对桶有相应的权限,才可以对桶进行操作 ,如创建、删除、显示、设置桶ACL等。

一个帐号及帐号下的所有IAM用户可创建的桶+并行文件系统的上限为100个 。每个桶中存放的对象的数量和大小总和没有限制,用户不需要考虑数据的可扩展性。

由于OBS是基于REST风格HTTP和HTTPS协议的服务 ,你可以通过URL(Uniform Resource Locator)来定位资源。

2.对象(Object)是OBS中数据存储的基本单位,一个对象实际是一个文件的数据与其相关属性信息(元数据)的集合体用户上传至OBS的数据都以对象的形式保存在桶中

对象包括了Key,Metadata,Data三部分:

(1).Key:键值,即对象的名称,为经过UTF-8编码的长度大于0且不超过1024的字符序列。一个桶里的每个对象必须拥有唯一的对象键值

(2).Metadata:元数据,即对象的描述信息,包括系统元数据和用户元数据,这些元数据以键值对(Key-Value)的形式被上传到OBS中。

系统元数据由OBS自动产生,在处理对象数据时使用,包括Date,Content-length,Last-modify,ETag等。

用户元数据由用户在上传对象时指定,是用户自定义的对象描述信息。

(3).Data:数据,即文件的数据内容。

通常,我们将对象等同于文件来进行管理 ,但是由于OBS是一种对象存储服务,并没有文件系统中的文件和文件夹概念。为了使用户更方便进行管理数据,OBS提供了一种方式模拟文件夹。通过在对象的名称中增加"/",例如"test/123.jpg"。此时,"test"就被模拟成了一个文夹,"123.jpg"则模拟成"test"文件夹下的文件名了,而实际上,对象名称(Key)仍然是"test/123.jpg"。

上传对象时,可以指定对象的存储类别,若不指定,默认与桶的存储类别一致。上传后,对象的存储类别可以修改。

在OBS管理控制台和客户端上,用户均可直接使用文件夹的功能,符合文件系统下的操作习惯。

对象存储服务提供了多种资源管理工具:用户访问OBS的方式有多种,包括OBS控制台、OBS客户端(OBS Browser+)、OBS命令行工具(obsutil)、API、SDK ,无论访问方式封装成何种形式,其本质都是通过OBS提供的REST风格的API接口进行请求。

1.管理控制台:是网页形式的 。通过管理控制台,你可以使用直观的界面进行相应的操作。

2.OBS Browser+:是一款运行在Windows系统上的对象存储服务管理工具 ,OBS Browser+的图形化界面可以非常方便地让用户在本地对OBS进行管理。

3.obsutil:是一款用于访问管理OBS的命令行工具 ,你可以使用该工具对OBS进行常用的配置管理操作。对于熟悉命令行程序的用户,obsutil是执行批量处理、自动化任务的不错选择。obsutil适用于Windows、Linux和macOS三大主流的操作系统

4.obsfs:是OBS提供的一款基于FUSE的文件系统工具 ,主要用于将并行文件系统挂载至Linux系统,让用户能够在本地像操作文件系统一样直接使用OBS海量的存储空间。

5.SDK:是对OBS服务提供的REST API进行的封装 ,以简化用户的开发工作。用户直接调用SDK提供的接口函数即可实现使用OBS业务能力的目的。

6.API:OBS提供REST形式的访问接口,使用户能够非常容易地从Web应用中访问OBS。用户可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。

OBS的接口既支持认证请求,也支持匿名请求 。匿名请求通常仅用于需要公开访问的场景,例如静态网站托管。除此之外,绝大多数场景是需要经过认证的请求才可以访问成功。经过认证的请求总是需要包含一个签名值,该签名值以请求者的访问密钥(AK/SK)作为加密因子,结合请求体携带的特定信息计算而成。通过访问密钥(AK/SK)认证方式进行认证鉴权,即使用Access Key ID(AK)/Secret Access Key(SK)加密的方法来验证某个请求发送者身份

OBS支持如下请求方式

1.通过永久访问密钥访问OBS:用户可以在"我的凭证"页面创建永久访问密钥(AK/SK)

2.通过临时访问密钥访问OBS: OBS可以通过IAM获取临时访问密钥(临时AK,SK和securitytoken)进行临时授权访问。临时访问密钥主要用于授权第三方临时访问OBS服务。

3.通过临时URL访问OBS:对桶或对象进行创建桶、上传对象和下载对象等操作。临时URL是由文件的访问域名和临时鉴权信息组成。

4.通过IAM委托访问OBS:IAM委托为统一身份认证服务IAM的功能特性,OBS在部分使用场景中(如CDN私有桶回源、跨区域复制),需要使用IAM委托功能,授予其他用户或云服务OBS的访问权限,替委托方管理OBS资源,实现安全高效的代维工作。

IAM用户若希望使用AK/SK访问OBS,必须要帐号为其开启"编程访问".

OBS权限控制 :默认情况下,OBS的资源(桶和对象)都是私有的,只有资源拥有者可以访问OBS资源,其他用户在未经授权的情况下均无OBS访问权限。OBS的权限控制是指通过编写访问策略向其他帐号或者IAM用户授予资源的控制权限。例如,你拥有一个桶,你可以授权一个其他的IAM用户上传对象到你的桶中;你也可以将桶开放给非公有云用户访问,即桶作为一个公共资源,能被互联网上任何人访问。OBS提供多种方式将OBS资源权限授予给他人,资源拥有者可以根据业务需求制定不同的权限控制方案,从而确保数据安全。

OBS提供多种权限控制方式,包括IAM权限、桶策略、对象ACL、桶ACL。

创建桶:一个帐号及帐号下的所有IAM用户一共可创建100个桶。考虑到桶名会作为访问域名的一部分,需要参与域名解析,因此桶名需要满足DNS域名规范。长度范围为3到63个字符,支持小写字母、数字、中划线(-)、英文句号(.)。

首次登入华为云,需要先注册一个账号,然后实名认证,为了测试,可花费1元购买包月套餐,40G资源包

对象存储服务软件开发工具包(OBS SDK , Object Storage Service Software Development Kit)是对OBS服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用OBS SDK提供的接口函数即可实现使用OBS服务业务能力的目的。

OBS SDK支持的语言包括:Java、Python、C、Go、.Net、Android、iOS等,这里介绍下C的使用。

Ubuntu 18.04上编译SDK

1.OBS C SDK下载:从 https://github.com/huaweicloud/huaweicloud-sdk-c-obs clone项目,然后切换到tag v3.23.3.2,即最新发布版本,执行:git checkout v3.23.3.2;

2.编译:

(1).为source/eSDK_OBS_API/eSDK_OBS_API_C++/build.sh添加执行权限:

bash 复制代码
sudo chmod +x source/eSDK_OBS_API/eSDK_OBS_API_C++/build.sh

(2).将终端定位到source/eSDK_OBS_API/eSDK_OBS_API_C++目录下,执行:

bash 复制代码
./build.sh obs_sdk_api_c++ release

执行完上述命令后会生成obs_sdk_api_c++.tgz,此包内包含了由源码生成的eSDKOBS动态库,其它动态库是从仓库的其它目录中直接拷贝过来的。eSDKOBS动态库的源码在source/eSDK_OBS_API/eSDK_OBS_API_C++/src目录下。

也可以直接使用clone后存在的现成库:release/huaweicloud-obs-sdk-c-linux_3.23.3.2.tgz。

解压缩obs_sdk_api_c++.tgz,此包内包含demo、include、lib三个目录,其中demo中为测试代码,将终端定位到demo目录下,执行make即可生成demo和object_test可执行文件。

使用OBS客户端进行接口调用操作完成后,没有返回异常,则表明接口调用成功;若返回异常,则说明操作失败。修改demo.c函数test_create_bucket,将里面的create_bucket函数的第三个参数由NULL调整为具体的终端节点,否则在指定非默认区域时创建桶会失败

执行demo可执行文件会在与demo目录同一目录下生成logs目录,此目录下的eSDK-OBS-API-Linux-C.run.log文件记录了每次执行命令后的信息,若操作失败,可从此文件中获得更多错误信息。

修改demo.c,从控制台下载AK/SK,将其拷贝给ACCESS_KEY_ID和SECRET_ACCESS_KEY,指定HOST_NAME,注意要同步修改location_constraint,然后指定桶名,注释掉main中的其它接口只保留test_create_bucket和test_head_bucket,重新make,然后执行demo,结果如下图所示:

实际使用中会将相关功能都封装在一个类中提供简单接口供调用。

相关推荐
紫雾凌寒10 小时前
【 HarmonyOS 面试题】2026 最新 ArkTS 语言基础面试题
华为·面试·程序员·华为云·职场发展·harmonyos·arkts
咕噜企业分发小米3 天前
阿里云与华为云基因测序数据同步的日志内容中,哪些字段对于故障排查最为关键?
数据库·阿里云·华为云
qq_316837755 天前
使用post方式上传文件到华为云obs
华为云
咕噜企业分发小米6 天前
阿里云与华为云基因测序数据同步安全性对比?
阿里云·华为云·云计算
咕噜企业分发小米6 天前
阿里云与华为云基因测序数据同步延迟对比?
阿里云·华为云·云计算
洲洲不是州州6 天前
APP与华为云和设备端的通信
华为云·手机apk·云端通信
咕噜企业分发小米6 天前
阿里云与华为云基因测序数据同步的日志格式是什么?
阿里云·华为云·云计算
咕噜企业分发小米6 天前
阿里云和华为云基因测序数据同步的审计日志如何查看?
阿里云·oracle·华为云
咕噜企业分发小米7 天前
阿里云与华为云基因测序数据分析中如何优化成本?
阿里云·华为云·云计算
咕噜企业分发小米7 天前
阿里云与华为云基因测序数据分析如何实现数据协同?
阿里云·华为云·云计算