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

news2024/11/28 10:52:15

      华为云的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添加执行权限:

sudo chmod +x source/eSDK_OBS_API/eSDK_OBS_API_C++/build.sh

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

./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,结果如下图所示:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/992429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云云耀云服务器L实例评测|在Docker环境下部署Statping服务器监控工具

华为云云耀云服务器L实例评测|在Docker环境下部署Statping服务器监控工具 一、前言1.1 云耀云服务器L实例简介1.2 Statping简介1.3 Statping特点 二、本次实践介绍2.1 本次实践简介2.2 本次环境规划 三、购买云耀云服务器L实例3.1 购买云耀云服务器L实例3.3 查看云耀…

商汤科技AGI这些年:上半场「基建」,下半场「变现」

【潮汐商业评论/原创】 纵观一次次科技革命引领的生产力变革,都绝非一蹴而就,而是在不断的技术突破中,找到产业的落脚点,再回归到社会应用中去。 当下的人工智能也是如此。今年以来,大模型和生成式AI作为重要的科技突…

OpenCV项目实战(1)— 如何去截取视频中的帧

前言:Hello大家好,我是小哥谈。针对一段视频,如何去截取视频中的帧呢?本节课就给大家介绍两种方式,一种方式是按一定间隔来截取视频帧,另一种方式是截取视频的所有帧。希望大家学习之后能够有所收获&#x…

无涯教程-JavaScript - IMSIN函数

描述 IMSIN函数以x yi或x yj文本格式返回复数的正弦。复数的正弦为- $$\sin(x yi) \sin(x)\cosh(y) \cos(x)\sin(y)i $$ 语法 IMSIN (inumber)争论 Argument描述Required/OptionalInumberA Complex Number for which you want the sine.Required Notes Excel中的复数仅…

python-55-打包exe执行

目录 前言一、pyinstaller二、实践打包exe1、遇坑1:Plugin already registered2、遇坑2:OSError 句柄无效 三、总结 前言 你是否有这种烦恼? 别人在使用你的项目时可能还需要安装各种依赖包?别人在使用你的项目,可能…

Bean 的生命周期总结

目录 一、Bean生命周期的五个阶段 Bean的初始化 二、PostConstruct 和 PreDestroy 各自的效果 三、 实例化和初始化的区别 四、为什么要先设置属性在进⾏初始化呢? 一、Bean生命周期的五个阶段 Java 中的公共类称之为 Bean 或 Java Bean,而 Spring 中的…

深度学习的数值问题

文章目录 梯度下降临界点、驻点、拐点、鞍点、顶点(曲线)、曲率近似优化预测最佳步长 梯度下降 往斜率的反方向走。 临界点、驻点、拐点、鞍点、顶点(曲线)、曲率 临界点:在数学中,临界点是指函数的导数为…

【APISIX】W10安装APISIX

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。以下简单介绍Windows下借助Docker Desktop来安装APISIX。 具体应用场景可参考官网(https://apisix.…

安科瑞铁塔基站能耗监控解决方案

安科瑞 华楠 1 背景概述 5G发展,基站先行。5G基站的选址建设,是保证5G信号覆盖的基础,因此5G基站建设是5G产业布局的一部分,也是5G成熟的基础。 2G、3G、4G均是低频段信号传输,宏基站几乎能应付所有的信号覆盖。但由…

Navicat Premium 16 安装及卸载

Navicat Premium 16 安装及卸载 文章目录 Navicat Premium 16 安装及卸载一 、简介二、下载三、安装四、使用五、卸载 一 、简介 Navicat Premium 是一套可创建多个连接的数据库开发工具,让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、…

【HTML专栏4】常用标签(标题、段落、换行、文本格式化、注释及特殊字符)

本文属于HTML/CSS专栏文章,适合WEB前端开发入门学习,详细介绍HTML/CSS如果使用,如果对你有所帮助请一键三连支持,对博主系列文章感兴趣点击下方专栏了解详细。 博客主页:Duck Bro 博客主页系列专栏:HTML/CS…

线程的常用方法及六种状态

一、线程核心执行流程方法 -- run() run方法是Runnable接口中定义的。所有实现Runnable的接口的子类都需要覆写run方法。 run方法是线程的核心执行流程方法,也就是说,run方法决定了线程启动后要干什么,当run方法执行完…

2.11 PE结构:添加新的节区

在可执行PE文件中,节(section)是文件的组成部分之一,用于存储特定类型的数据。每个节都具有特定的作用和属性,通常来说一个正常的程序在被编译器创建后会生成一些固定的节,通过将数据组织在不同的节中&…

微信小程序接入隐私弹窗说明及详细过程

相信各位做小程序的小伙伴在微信小程序后台应该都接到了官方通知的小程序隐私新规,如果还未收到的小程序可以看一下: 为规范开发者的用户个人信息处理行为,保障用户合法权益,自2023年9月15日起,对于涉及处理用户个人信…

OpenCV 09(形态学)

一、形态学 形态学指一系列处理图像 形状特征 的图像处理技术. 形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析和目标识别。这些处理方法基本是对二进制图像进行处理, 即黑白图像卷积核…

JUC编程中锁引发的“见解”

JUC编程中锁引发的“见解” 一大早就在想锁是干嘛的?什么情况下要用锁?想了很多,下面的所有表述都是就是我的思考流程,欢迎所有人一起讨论、更正。 文章目录 JUC编程中锁引发的“见解”1、什么是JUC编程?2、JUC编程中什么情况下需…

C/C++之链表的建立

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.头插 1.1简介 1.2代码实现头插 …

二维数组前缀和(JAVA)

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 暴力 双层for循环,遍历子矩阵。 前缀和算法: class NumMatrix {private int sum[][];private int matrix[][];public NumMatrix(int[][] matrix) {this.matrixmatrix;int row…

AI 帮我写代码——Amazon CodeWhisperer 初体验

文章作者:游凯超 人工智能的突破和变革正在深刻地改变我们的生活。从智能手机到自动驾驶汽车,AI 的应用已经深入到我们生活的方方面面。而在编程领域,AI 的崭新尝试正在开启一场革命。Amazon CodeWhisperer,作为亚马逊云科技的一款…

【高德地图】 覆盖物/画点/画折线/画多边形/画矩形/画圆

官方示例 https://lbs.amap.com/demo/javascript-api/example/mouse-operate-map/mouse-draw-overlayers <!doctype html> <html lang"en"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content…