【仓颉三方库】对象存储——OBS Cangjie SDK

介绍

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

特性

  • 🚀 服务端加密,支持SSE-OBS,SM4服务端加密方式
  • 🚀 生命周期管理
  • 🚀 图片处理特性
  • 🚀 并行文件系统的权限配置
  • 🚀 在线解压
  • 🚀 桶策略列表呈现方式优化
  • 🚀 CDN自动刷新
  • 🚀 支持镜像回源
  • 🚀 持为对象设置WORM策略

产品架构

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

桶是OBS中存储对象的容器,每个桶都有自己的存储类别、访问权限、所属区域等属性,用户在互联网上通过桶的访问域名来定位桶。

对象是OBS中数据存储的基本单位,一个对象实际是一个文件的数据与其相关属性信息的集合体,包括Key、Metadata、Data三部分:

  • Key:键值,即对象的名称,为经过UTF-8编码的长度大于0且不超过1024的字符序列。一个桶里的每个对象必须拥有唯一的对象键值。
  • Metadata:元数据,即对象的描述信息,包括系统元数据和用户元数据,这些元数据以键值对(Key-Value)的形式被上传到OBS中。
    • 系统元数据由OBS自动产生,在处理对象数据时使用,包括Date,Content-length,Last-modify,ETag等。
    • 用户元数据由用户在上传对象时指定,是用户自定义的对象描述信息。
  • Data:数据,即文件的数据内容。

华为云针对OBS提供的REST API进行了二次开发,为您提供了控制台、SDK和各类工具,方便您在不同的场景下轻松访问OBS桶以及桶中的对象。当然您也可以利用OBS提供的SDK和API,根据您业务的实际情况自行开发,以满足不同场景的海量数据存储诉求。

源码目录

├─ lib
│  ├─ crypto4cj
│  ├─ httpclient4cj
│  └─ libcrypto.dll
└─ src
   ├─ logger
   ├─ obstest
   ├─ services
   │  ├─ action
   │  ├─ client
   │  ├─ crypto
   │  ├─ exception
   │  ├─ model
   │  ├─ progress
   │  ├─ requestHandler
   │  ├─ responseHandler
   └─ util
  • lib 第三方依赖
  • src 源码目录
  • src/log 日志记录类
  • src/obstest 测试用例
  • src/services/action 业务处理
  • src/services/client 请求入口
  • src/services/crypto 加密处理
  • src/services/exception 异常处理
  • src/services/model 模块类
  • src/services/progress传输进度处理
  • src/services/requestHandler请求前处理
  • src/services/responseHandler请求后处理
  • src/util 工具类

接口说明

  • 主要类和函数接口说明详见 接口文档手册

使用说明

依赖分析

cnagjie:  v0.51.4
obsserver: v3.23.9

编译(win/linux)

cjpm build -V
创建 桶
main(): Int64 {

    // endpoint填写桶所在的endpoint
    var endPoint = "https://obs.cn-east-3.myhuaweicloud.com"
    // 您可以登录访问管理控制台获取访问密钥AK/SK
    var ak = "xxxxxxxxx"
    var sk = "xxxxxxxxxxxxx"
    // 创建ObsClient实例
    var obsClient = ObsClient().creatObsClient(ak, sk, endPoint)
    var createBucketRequest = CreateBucketRequest("cn-east-3", "cangjietest4")
    //设置桶访问权限
    createBucketRequest.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ)
    //设置桶存储类型
    createBucketRequest.setStorageClass(StorageClassEnum.COLD)
    //创建桶
    var obsbucket = obsClient.createBucket(createBucketRequest)
}

设置对象元数据
main(): Int64 {

    // endpoint填写桶所在的endpoint
    var endPoint = "https://obs.cn-east-3.myhuaweicloud.com"
    // 您可以登录访问管理控制台获取访问密钥AK/SK
    var ak = "xxxxxxxxx"
    var sk = "xxxxxxxxxxxxx"
    // 创建ObsClient实例
    var obsClient = ObsClient().creatObsClient(ak, sk, endPoint)
    var request = SetObjectMetadataRequest("cangjie12", "testkey")
    request.setExpires("Expires")
    //设置对象自定义元数据
    request.addUserMetadata("property1", "property-value1")
    //用户头域列表
    var userHeaders = HashMap<String, String>()
    userHeaders.put("property2", "property-value2")
    userHeaders.put("x-obs-meta-property3", "property-value3")
    request.setUserHeaders(userHeaders)
    var metadata = obsClient.setObjectMetadataImpl(request)
    var  mate =  metadata.getUserMetadata("property1").getOrThrow()
    println((mate as String).getOrThrow())
}
对象上传
main(): Int64 {

    // endpoint填写桶所在的endpoint
    var endPoint = "https://obs.cn-east-3.myhuaweicloud.com"
    // 您可以登录访问管理控制台获取访问密钥AK/SK
    var ak = "xxxxxxxxx"
    var sk = "xxxxxxxxxxxxx"
    // 创建ObsClient实例
    var obsClient = ObsClient().creatObsClient(ak, sk, endPoint)
    var createBucketRequest = CreateBucketRequest("cangjie4")
    var putObjectRequest = PutObjectRequest()
    var str = "hello world"
    var byteStream = ByteArrayStream()
    byteStream.write(str.toArray())
    //流上传
    putObjectRequest.setInput(byteStream)
    putObjectRequest.setBucketName("cangjie4")
    putObjectRequest.setObjectKey("hello11")
    var obsfile = obsClient.putObject(putObjectRequest)
    println(obsfile.getObjectUrl())
}
范围下载
main(): Int64 {

    // endpoint填写桶所在的endpoint
    var endPoint = "https://obs.cn-east-3.myhuaweicloud.com"
    // 您可以登录访问管理控制台获取访问密钥AK/SK
    var ak = "xxxxxxxxx"
    var sk = "xxxxxxxxxxxxx"
    // 创建ObsClient实例
    var obsClient = ObsClient().creatObsClient(ak, sk, endPoint)
    var getObjectRequest = GetObjectRequest()
    //设置范围
    getObjectRequest.rangeStart = 0
    getObjectRequest.rangeEnd = 10
    getObjectRequest.setBucketName("cangjie12")
    getObjectRequest.setObjectKey("Obstestkey1")
    var obsobject = obsClient.getObject(getObjectRequest)
    var input = obsobject.getInputStream().getOrThrow()
    let output = ByteArrayStream()
    IOUtils.copyToStream(input, output)
    println(output.bytes().toString())
    println(String.fromUtf8(output.bytes())) 
}

鸿蒙全栈开发全新学习指南

总是有很多小伙伴反馈说:鸿蒙开发不知道学习哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点? 为了解决大家这些学习烦恼。在这准备了一份很实用的鸿蒙(HarmonyOS NEXT)学习路线与学习文档给大家用来跟着学习。

针对一些列因素,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。

本路线共分为四个阶段

第一阶段:鸿蒙初中级开发必备技能

请添加图片描述

第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH

请添加图片描述

第三阶段:应用开发中高级就业技术

在这里插入图片描述

第四阶段:全网首发-工业级南向设备开发就业技术:gitee.com/MNxiaona/733GH

《鸿蒙 (Harmony OS)开发学习手册》(共计892页)

如何快速入门?

1.基本概念
2.构建第一个ArkTS应用
3.……

在这里插入图片描述

开发基础知识:gitee.com/MNxiaona/733GH

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

鸿蒙开发面试真题(含参考答案):gitee.com/MNxiaona/733GH

在这里插入图片描述

OpenHarmony 开发环境搭建

图片

《OpenHarmony源码解析》:gitee.com/MNxiaona/733GH

搭建开发环境
系统架构分析

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……
    图片

OpenHarmony 设备开发学习手册

图片

项目实战开发教学:gitee.com/MNxiaona/733GH

在这里插入图片描述

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:gitee.com/MNxiaona/733GH

在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值