更新时间:2023-11-09 GMT+08:00
分享

校验下载对象的一致性

OBS Browser+、obsutil以及OBS SDK都支持在下载对象时进行一致性校验,您可以根据自己的业务选择任意一种方式进行校验,本文就几种方式如何使用一致性校验进行了详细说明。

前提条件

待下载对象已有MD5值,如果没有MD5值,将不会进行一致性校验。对象的MD5值需要在上传的时候计算并设置,详细操作请参见校验上传对象的一致性

方式一:使用obsutil校验下载对象的一致性

obsutil支持在下载对象时通过附加参数(vmd5)来校验下载数据的一致性。

以在Windows操作系统下载mytestbucket桶中的test.txt文件至本地为例,开启数据一致性校验的步骤如下:

  1. 执行以下命令,检查待下载对象是否具有MD5信息。

    obsutil stat obs://test-bucket/test.txt
    • 返回的对象基本信息中,包含MD5信息,如下图所示,执行步骤2

    • 不包含MD5信息,下载对象时无法进行一致性校验。

  2. 执行以下命令,下载对象。

    obsutil cp obs://mytestbucket/test.txt D:\test.txt -vmd5
    • 对象下载成功且通过一致性校验,回显信息如下:

    • 如果桶中对象没有MD5值,对象能够下载成功,但不会校验一致性,回显信息如下:

方式二:使用OBS Browser+校验下载对象的一致性

OBS Browser+默认关闭MD5校验,在OBS Browser+上启用MD5校验一致性并下载对象的步骤如下:

  1. 登录OBS Browser+。
  2. 单击客户端右上方的,并选择“高级设置”。
  3. 勾选“MD5校验”,如图1所示。

    图1 配置MD5校验

  4. 单击“确定”。
  5. 选择待下载文件的桶,下载文件。

    • 若MD5校验成功,则文件下载成功。
    • 若MD5校验失败,则文件下载失败,且在任务管理中提示失败原因:校验文件MD5失败。

方式三:使用OBS SDK校验下载对象的一致性

OBS SDK对待下载对象的自定义元数据中的MD5值和下载到本地的对象的MD5值进行对比,通过对比结果判断下载对象的一致性。

此处以使用OBS Java SDK下载mytestbucket桶中一个名为test.txt的文本文件为例,下载过程使用MD5值校验数据一致性的示例代码如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
String endPoint = "https://your-endpoint";
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
// 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY_ID");
// 创建ObsClient实例
final ObsClient obsClient = new ObsClient(ak, sk, endPoint);
// 获取对象的MD5值
ObjectMetadata metadata = obsClient.getObjectMetadata("mytestbucket", "test.txt");
String md5Origin = metadata.getUserMetadata("contentMd5");
// 计算下载后对象的MD5值
Obsobject obsobject = obsClient.getObject("mytestbucket", "test.txt");
String md5Download = obsClient.base64Md5(obsobject.getObjectContent());
// 对比MD5值
if(md5Origin.contentEquals(md5Download))
    System.out.println("Object MD5 validation passes!\n");
else
    System.out.println("Object MD5 validation failed!\n"); 

在以上示例代码中,获取对象MD5值时的contentMd5是在上传时设置的自定义元数据,实际开发中需要根据自定义的元数据名称修改。

分享:

    相关文档

    相关产品