首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐
2025年6月15日 星期日 8:31pm

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

  • 25-04-23 20:41
  • 3904
  • 6652
juejin.cn

介绍

对象存储服务软件开发工具包(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,根据您业务的实际情况自行开发,以满足不同场景的海量数据存储诉求。

源码目录

cj
代码解读
复制代码
├─ 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 工具类

接口说明

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

使用说明

依赖分析

cj
代码解读
复制代码
cnagjie: v0.51.4 obsserver: v3.23.9

编译(win/linux)

cj
代码解读
复制代码
cjpm build -V

功能示例

示例详见demo

创建 桶

cj
代码解读
复制代码
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) }

设置对象元数据

cj
代码解读
复制代码
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() 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()) }

DD一下:欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。

erlang
代码解读
复制代码
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。` 1.OpenHarmony开发基础 2.OpenHarmony北向开发环境搭建 3.鸿蒙南向开发环境的搭建 4.鸿蒙生态应用开发白皮书V2.0 & V3.0 5.鸿蒙开发面试真题(含参考答案) 6.TypeScript入门学习手册 7.OpenHarmony 经典面试题(含参考答案) 8.OpenHarmony设备开发入门【最新版】 9.沉浸式剖析OpenHarmony源代码 10.系统定制指南 11.【OpenHarmony】Uboot 驱动加载流程 12.OpenHarmony构建系统--GN与子系统、部件、模块详解 13.ohos开机init启动流程 14.鸿蒙版性能优化指南 .......

对象上传

cj
代码解读
复制代码
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()) }

范围下载

cj
代码解读
复制代码
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())) }

欢迎给我们提交PR & Issue,欢迎参与任何形式的贡献。

注:本文转载自juejin.cn的别说我什么都不会的文章"https://juejin.cn/post/7496346291355467795"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
AndroidAndroid buildToolsVersion 会影响什么

Android buildToolsVersion 会影响什么

Android的buildToolsVersion(构建工具版本)是项目配置中的关键参数,直接影响开发流程和最终应用的多个方面。以下是其主要影响维度及对应的技术细节:一、构建过程与效率构建速度与性能优化新版本的构建工具通常包含性能改进(如增...
2025-04-25 3426 11681
Android面试题 - Android - Kotlin相关内容

面试题 - Android - Kotlin相关内容

1. Kotlin 简介及特性Kotlin 是一门由 JetBrains 开发的现代编程语言,可以在 JVM 上运行。主要特性包括:空安全(Null Safety)简洁的语法与 Java 100% 互操作支持函数式编程智能类型推断协程支持2...
2025-04-25 4246 12209
Android详解 Android APP 启动流程

详解 Android APP 启动流程

版权归作者所有,如有转发,请注明文章出处:cyrus-studio.github.io/blog/APP 启动流程app 启动流程大概如下:arduino代码解读复制代码发起进程(startActivity/startService...)...
2025-04-25 2598 11009
Android

Flutter 在全新 Platform 和 UI 线程合并后,出现了什么大坑和变化?

在两个月前,我们就聊过 3.29 上《Platform 和 UI 线程合并》的具体原因和实现方式,而事实上 Platform 和 UI 线程合并,确实为后续原生语言和 Dart 的直接同步调用打了一个良好基础,在《Flutter Roadm...
2025-04-25 2929 5316
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

  • 1

    Android buildToolsVersion 会影响什么

  • 2

    面试题 - Android - Kotlin相关内容

  • 3

    详解 Android APP 启动流程

  • 4

    Flutter 在全新 Platform 和 UI 线程合并后,出现了什么大坑和变化?

  • 5

    Kotlin对Android整体编程有什么明显的改进,这几年自身有什么更新

  • 6

    「架构篇 2」认识 MVC / MVP / MVVM / MVI

  • 7

    「架构篇 1」认识 MVC / MVP / MVVM / MVI

  • 8

    一个Android 通用方便快捷使用IO库

  • 9

    从信也(拍拍贷),乐信年报及全球布局看未来行业发展趋势

  • 10

    Retrofit框架分析(二):注解、反射以及动态代理,Retrofit框架动态代理的源码分析

140
Android
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top