华为云中对象存储服务软件开发工具包(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添加执行权限:

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.rhkb.cn/news/127164.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ_高级特性_事务消息

Apache RocketMQ在4.3.0版中已经支持分布式事务消息,这里RocketMQ采用了2PC的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息,如下图所示。 事务消息发送步骤如下: 生产者将半事务消息发送至消息队…

基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 主要…

SpringMVC实现增删改查(CRUD)--从头到尾全面详细讲解

一&#xff0c;实现CRUD前准备工作 1.1 pom.xml依赖的配置 创建Model项目并导入相关pom.xml依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><m…

Agisoft Metashape相机标定笔记

Lens Calibration(镜头标定) 使用Metashape进行自动相机标定是可能的。Metashape使用LCD显示屏作为标定目标&#xff08;可选&#xff1a;使用打印的棋盘格图案&#xff0c;但需保证它是平坦的且单元格是正方形&#xff09;。 相机标定步骤支持全相机标定矩阵的估计&#xff…

以可视化方式解释 Go 并发 - 通道

在并发编程中&#xff0c;许多编程语言采用共享内存/状态模型。然而&#xff0c;Go 通过实现 通信顺序进程 (CSP) 区别于众多语言。在 CSP 中&#xff0c;一个程序由并行的进程组成&#xff0c;这些进程不共享状态&#xff0c;而是使用通道进行通信和同步它们的操作。因此&…

Linux编辑器 VI VIM

vim 命令模式 插入模式 ex模式 \ 命令模式 /查找关键字后&#xff0c;按n键在找到的结果之前来换的切换、 EX模式

Ubuntu编译运行socket.io

本篇文章记录一下自己在ubuntu上编译运行socket.io的过程&#xff0c;客户端选用的是socket.io的c的库&#xff0c;编译起来倒不难&#xff0c;但是说到运行的话&#xff0c;对我来说确实是花了点功夫。毕竟程序要能运行起来才能更方便地去熟悉代码&#xff0c;因此今天我就记录…

常见排序算法

排序简介常见排序算法插入排序直接插入排序希尔排序 选择排序选择排序堆排序 交换排序冒泡排序快速排序hoare版挖坑法前后指针法非递归实现快排优化 归并排序非递归实现归并排序海量数据排序问题 基数排序&#xff08;不用比较就能够排序&#xff09;桶排序计数排序&#xff08…

Zoom正式发布类ChatGPT产品—AI Companion

9月6日&#xff0c;全球视频会议领导者Zoom在官网宣布&#xff0c;正式发布生成式AI助手——AI Companion。 AI Companion提供了与ChatGPT类似的功能&#xff0c;包括根据文本对话起草各种内容&#xff0c;自动生成会议摘要&#xff0c;自动回答会议相关问题等&#xff0c;以帮…

Windows下安装配置Nginx

nginx安装 官网下载地址 https://nginx.org/en/download.html 推荐使用稳定版本 截止时间2023年9月5日稳定版本为 1.24.0 百度网盘 链接&#xff1a;https://pan.baidu.com/s/1cXm-jN2fMzKdVMRhbG72Fg 提取码&#xff1a;9hcq 下载完成以后,得到nginx压缩包; 双击启动nginx.…

3D目标检测数据集 KITTI(标签格式解析、点云转图像、点云转BEV)

本文介绍在3D目标检测中&#xff0c;理解和使用KITTI 数据集&#xff0c;包括KITTI 的基本情况、下载数据集、标签格式解析、点云转图像、点云转BEV。 目录 1、KITTI数据集中3D框可视化的效果 2、先看个视频&#xff0c;了解KITTI 的基本情况 3、来到KITTI官网&#xff0c;下…

电脑提示“系统找不到指定的文件”怎么办?

“系统找不到指定的文件”对于Windows用户来说是一个很常见的错误&#xff0c;尤其是Win10用户&#xff0c;经常会遇到Win10提示找不到指定文件。在此错误后面有时还会出现错误代码&#xff1a;0x80070002&#xff0c;但是&#xff0c;故障类型或代码在不同的操作系统规范上是不…

文本生成模型如何解码

文章目录 解码方法Greedy SearchBeam SearchsamplingTemperature Samplingtop-k samplingTop-p (nucleus) samplingContrastive search 总结相关资源 语言模型如何对于一个给定输入生成相应的输出呢&#xff1f;答案是使用解码策略(decoding strategy)。这里对现有的解码策略做…

用python实现基本数据结构【02/4】

*说明 如果需要用到这些知识却没有掌握&#xff0c;则会让人感到沮丧&#xff0c;也可能导致面试被拒。无论是花几天时间“突击”&#xff0c;还是利用零碎的时间持续学习&#xff0c;在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢&#xff1f;列表、字典、集…

【白话机器学习系列】白话梯度下降

白话梯度下降 梯度下降是机器学习中最常见的优化算法之一。理解它的基本实现是理解所有基于它构建的高级优化算法的基础。 文章目录 优化算法一维梯度下降均方误差梯度下降什么是均方误差单权重双权重三权重三个以上权重 矩阵求导结论 优化算法 在机器学习中&#xff0c;优化是…

ChatGPT实战与私有化大模型落地

文章目录 大模型现状baseline底座选择数据构造迁移方法评价思考 领域大模型训练技巧Tokenizer分布式深度学习数据并行管道并行向量并行分布式框架——Megatron-LM分布式深度学习框架——Colossal-AI分布式深度学习框架——DeepSpeedP-tuning 微调 资源消耗模型推理加速模型推理…

Python批处理(一)提取txt中数据存入excel

Python批处理&#xff08;一&#xff09;提取txt中数据存入excel 问题描述 现从冠层分析软件中保存了叶面积指数分析的结果&#xff0c;然而软件保存格式为txt&#xff0c;且在不同的文件夹中&#xff0c;每个文件夹的txt文件数量不固定&#xff0c;但是txt文件格式固定。现需…

C#__多线程之任务和连续任务

/// <summary> /// /// 任务&#xff1a;System.Threading.Tasks&#xff08;异步编程的一种实现方式&#xff09; /// 表应完成某个单元工作。这个工作可以在单独的线程中运行&#xff0c;也可以以同步方式启动一个任务。 /// /// 连续任务&#…

thinkphp6-简简单单地开发接口

目录 1.前言TP6简介 2.项目目录3.运行项目运行命令访问规则 4.model db使用db连接配置model编写及调用调用接口 5.返回json格式 1.前言 基于上篇文章环境搭建后&#xff0c;便开始简单学习上手开发接口…记录重要的过程&#xff01; Windows-试用phpthink发现原来可这样快速搭…

如何使用SQL SERVER的OpenQuery

如何使用SQL SERVER的OpenQuery 一、OpenQuery使用说明二、 OpenQuery语法2.1 参数说明2.2注解 三、示例3.1 执行 SELECT 传递查询3.2 执行 UPDATE 传递查询3.3 执行 INSERT传递查询3.4 执行 DELETE 传递查询 一、OpenQuery使用说明 在指定的链接服务器上执行指定的传递查询。 …