校验下载对象的一致性
OBS Browser+、obsutil以及OBS SDK都支持在下载对象时进行一致性校验,您可以根据自己的业务选择任意一种方式进行校验,本文就几种方式如何使用一致性校验进行了详细说明。
前提条件
待下载对象已有MD5值,如果没有MD5值,将不会进行一致性校验。对象的MD5值需要在上传的时候计算并设置,详细操作请参见校验上传对象的一致性。
方式一:使用obsutil校验下载对象的一致性
obsutil支持在下载对象时通过附加参数(vmd5)来校验下载数据的一致性。
以在Windows操作系统下载mytestbucket桶中的test.txt文件至本地为例,开启数据一致性校验的步骤如下:
- 执行以下命令,检查待下载对象是否具有MD5信息。
obsutil stat obs://test-bucket/test.txt
- 返回的对象基本信息中,包含MD5信息,如下图所示,执行步骤2。
- 不包含MD5信息,下载对象时无法进行一致性校验。
- 返回的对象基本信息中,包含MD5信息,如下图所示,执行步骤2。
- 执行以下命令,下载对象。
obsutil cp obs://mytestbucket/test.txt D:\test.txt -vmd5
方式二:使用OBS Browser+校验下载对象的一致性
OBS Browser+默认关闭MD5校验,在OBS Browser+上启用MD5校验一致性并下载对象的步骤如下:
- 登录OBS Browser+。
- 单击客户端右上方的,并选择“高级设置”。
- 勾选“MD5校验”,如图1所示。
- 单击“确定”。
- 选择待下载文件的桶,下载文件。
- 若MD5校验成功,则文件下载成功。
- 若MD5校验失败,则文件下载失败,且在任务管理中提示失败原因:校验文件MD5失败。
方式三:使用OBS SDK校验下载对象的一致性
OBS SDK对待下载对象的自定义元数据中的MD5值和下载到本地的对象的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是在上传时设置的自定义元数据,实际开发中需要根据自定义的元数据名称修改。