华为OBS对象存储

一.SDK概述

对象存储服务软件开发工具包(OBS SDK,Object Storage Service Software Development Kit)是对OBS服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用OBS SDK提供的接口函数即可实现使用OBS服务业务能力的目的。相关开发包请从华为云OBS开发工具包(SDK)(https://developer.huaweicloud.com/sdk?OBS)获取。

二.java SDK开发入门

2.1、安装SDK

打开maven工程的pom.xml,在节点中加入以下配置

 <!--obs依赖 -->
<dependency><groupId>com.huaweicloud</groupId><artifactId>esdk-obs-java</artifactId><version>3.0.3</version>
</dependency>

2.2、初始化OBS客户端

向OBS发送任意HTTP/HTTPS请求之前,必须先创建一个ObsClient实例:

String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);// 使用访问OBS// 关闭obsClient
obsClient.close();

创建桶:桶是OBS全局命名空间,相当于数据的容器,文件系统的根目录,可以存储若干对象,以下代码展示如何创建一个桶:(如有桶可不创建)

obsClient.createBucket("bucketname");
  • 桶的名字是全局唯一的,所以您需要确保不与已有的桶名称重复。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用类IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my…bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户多次创建同名桶不会报错,创建的桶属性以第一次请求为准。
  • 更多创建桶的信息,请参见创建桶。

2.3、上传对象

obsClient.putObject("bucketname", "objectname", new ByteArrayInputStream("Hello OBS".getBytes()));

上传对象方式:

  • 流式上传

  • 文件上传

  • 分段上传

  • 追加上传

  • 断点续传上传

  • 基于表单上传

    SDK支持上传0KB~5GB的对象。流式上传、文件上传和追加上传的内容大小不能超过5GB;当上传较大文件时,请使用分段上传,分段上传每段内容大小不能超过5GB;基于表单上传提供了基于浏览器表单上传对象的方式。

2.4、下载对象

以下代码展示如何获取对象的内容

ObsObject obsObject = obsClient.getObject("bucketname", "objectname");
InputStream content = obsObject.getObjectContent();
if (content != null)
{BufferedReader reader = new BufferedReader(new InputStreamReader(content));while (true){String line = reader.readLine();if (line == null)break;System.out.println("\n" + line);}reader.close();
}
  • 调用ObsClient.getObject返回一个ObsObject实例,该实例包含对象内容及其属性。
  • 调用ObsObject.getObjectContent获取对象输入流,可读取此输入流获取其内容,用完之后请关闭这个流。
  • 更多下载对象的信息,请参见下载对象。

2.5、列举对象

当完成一系列上传对象操作后,可能需要查看桶中包含哪些对象。以下代码展示如何列举指定桶中对的对象:

ObjectListing objectListing = obsClient.listObjects("bucketname");
for(ObsObject obsObject : objectListing.getObjects()){System.out.println(" - " + obsObject.getObjectKey() + "  " +  "(size = " + obsObject.getMetadata().getContentLength() + ")");
}
  • 调用ObsClient.listObjects返回ObjectListing实例,该实例包含此次listObject请求的返回结果,可通过ObjetListing.getObjects获取所有对象(Object)的描述信息。
  • 上面的代码默认列举1000个对象(Object)。
  • 更丰富的列举功能,请参见列举对象。

2.6、删除对象

以下代码展示如何删除指定的对象

obsClient.deleteObject("bucketname", "objectname");

2.7、OBS客户端通用示例

使用OBS客户端进行接口调用操作完成后,没有异常抛出,则表明返回值有效,返回SDK公共响应头实例或其子类实例;若抛出异常,则说明操作失败,此时应从SDK自定义异常 实例中获取错误信息。

以下代码展示了使用OBS客户端的通用方式:

// 您的工程中可以只保留一个全局的ObsClient实例
// ObsClient是线程安全的,可在并发场景下使用
ObsClient obsClient = null;
try
{String endPoint = "https://your-endpoint";String ak = "*** Provide your Access Key ***";String sk = "*** Provide your Secret Key ***";// 创建ObsClient实例obsClient = new ObsClient(ak, sk, endPoint);// 调用接口进行操作,例如上传对象HeaderResponse response = obsClient.putObject("bucketname", "objectname", new File("localfile"));  // localfile为待上传的本地文件路径,需要指定到具体的文件名System.out.println(response);
}
catch (ObsException e)
{System.out.println("HTTP Code: " + e.getResponseCode());System.out.println("Error Code:" + e.getErrorCode());System.out.println("Error Message: " + e.getErrorMessage());System.out.println("Request ID:" + e.getErrorRequestId());System.out.println("Host ID:" + e.getErrorHostId());
}finally{// 关闭ObsClient实例,如果是全局ObsClient实例,可以不在每个方法调用完成后关闭// ObsClient在调用ObsClient.close方法关闭后不能再次使用if(obsClient != null){try{// obsClient.close();}catch (IOException e){}}
}

3、注意

如果同一个桶上传文件时,文件名重复,会覆盖之前上传的文件,可以重命名文件名,使用时间来区分文件:

private static int i = 0;
String filenameStr = file.getOriginalFilename();
String[] split = filenameStr.split("\\.");
String s = split[split.length-1];
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
if (i>=10){i = 0;
}
String filename = "gl"+i+"D"+df.format(new Date())+"."+s;// new Date()为获取当前系统时间,也可使用当前时间戳
++i;
log.info("上传文件名为:{}",filename);

java操作华为OBS对象存储服务器相关推荐

  1. Java集成华为云对象存储

    1.maven添加依赖 <dependency><groupId>com.huaweicloud</groupId><artifactId>esdk-o ...

  2. 华为OBS对象存储,每个人都应该用一用

    随着互联网硬件与软件的不断迭代,如今用户在网上冲浪的时间越来越多,智能手机的兴起诞生了各类短视频.快资讯网站以及自媒体市场.但由于大量的数据出现,对于用户及企业来说,如何存储这些数据成为了不可忽视的难 ...

  3. Java操作Redis存储对象类型数据

    背景描述 关于JAVA去操作Redis时,如何存储一个对象的数据,这是大家非常关心的问题,虽然官方提供了存储String,List,Set等等类型,但并不满足我们现在实际应用.存储一个对象是非常常见的 ...

  4. Java操作Redis存储HashMap对象类型数据

    背景描述 关于JAVA去操作Redis时,如何存储一个对象的数据,这是大家非常关心的问题,虽然官方提供了存储String,List,Set等等类型,但并不满足我们现在实际应用.存储一个对象是非常常见的 ...

  5. 华为云对象储存OBS,为企业提供优秀且安全的数据储存环境

    随着数字时代的发展,科技的创新,无论是个人还是企业对数据的存储要求也越来越重视,时代的变化让企业生产经营过程中产生的数据也越来越多,不管是大型企业还是小微企业对数据存储备份的要求也越来越高,对于一个普 ...

  6. 华为云对象存储OBS,安全可靠的云存储服务,让企业轻松上云

    随着时代的不断发展,不管是个人还是企业对数据的存储要求也越来越高,对于普通人来说,我们可以把文件.视频.图片等等存储到电脑.手机或者U盘等硬件设备中,但对于企业来说,庞大的数据量必须依靠专业的存储设备 ...

  7. 海量、安全、高可靠的华为云对象存储服务OBS,助力企业数据存储降本提效

    在信息化.数字化时代,企业的数据量日渐增长,对存储的需求也在不断变化,企业自建存储服务器受限于搭建存储服务器时使用的硬件设备,如果存储量不够,需重新购买存储硬盘,进行人工扩容,而且人力物力成本较高,为 ...

  8. 华为云对象存储服务OBS教你一招轻松解决存储难题

    身处于信息爆炸的时代,各种各样的数据琳琅满目,需要记录存储的资料和信息数不胜数,有时候个人都会感觉到存储空间不足,更何况是一些正处于发展阶段中小型企业?那对于存储的需求就更迫切了. 遇见这种问题,很多 ...

  9. 华为云对象存储服务OBS,海量存储安全可靠,让云存储更加简单

    随着产业数字化转型大潮的到来,企业生产经营过程中产生的数据也越来越多,不管是大型企业还是小微企业对数据存储备份的要求也越来越高,有的企业选择自购硬件设备进行存储,一方面需要付出高昂的成本,另一方面如果 ...

最新文章

  1. 计算string长度 java_夯实基础:掌握从Java 9+开始的String的空间优化
  2. 【若依(ruoyi)】swagger 接口 @SessionAttribute 修饰的参数
  3. Mike and gcd problem(思维)
  4. oncontextmenu事件
  5. 3-3:常见任务和主要工具之网络
  6. 信息学奥赛一本通(2071:【例2.14】平均分)
  7. 解决 XMLHttpRequest status = 0 问题 及 返回值为null问题
  8. connect mysql (4),mysql用法4
  9. 迷茫中,要让人生更精彩
  10. v-show在elementui中表格组件失效问题
  11. C中位域Struct操作
  12. img标签过滤加fs模块实现图片文件缓存
  13. 51单片机通过WIFI模块ESP8266控制LED灯(大致内容,经过测试成功实现)
  14. 多路测温系统C51语言,基于单片机的多路温度检测系统的.docx
  15. 最近做的一些文件破解的结果
  16. 激光SLAM框架总结
  17. the7主题footer.php,the7主题的安装和数据导入
  18. CSS3+JavaScript效果:胶卷式放映
  19. 微信小程序腾讯服务器地址要购买吗,微信小程序JavaScript SDK
  20. 字符串字符数组 PTA 7-10 古风排版

热门文章

  1. 步进电机驱动选型的详细指南
  2. HTML/CSS制作阿里巴巴注册界面
  3. 云呼服务器网站,云呼服务器网址
  4. CM 之父被踢出局:与乔布斯经历了同样的悲惨境遇
  5. XDOJ数字排序/选号程序
  6. 通俗讲解入栈、出栈(C语言)
  7. ios学习-delegate、传值、跳转页面
  8. 计算机学科a类排名,中国科学技术大学学科评估排名!附中科大a类学科名单
  9. permission uses-permission区别
  10. 解决'utf-8' codec can't decode byte 0xf1 in position 9: invalid continuation byte的问题