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

校验上传对象的一致性

obsutil、OBS Browser+以及OBS SDK都支持在上传对象时进行一致性校验,您可以根据自己的业务选择任意一种方式进行校验。本文分别介绍了几种方式在上传对象时进行一致性校验的操作指导。

方式一:使用obsutil校验上传对象的一致性

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

以在Windows操作系统上传本地一个位于D盘的test.txt文件至mytestbucket桶为例,开启一致性校验的命令示例如下:

obsutil cp D:\test.txt obs://mytestbucket/test.txt -vmd5

校验通过后,对象上传成功,系统显示Upload successfully的回显信息。

方式二:使用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提供Java、Python等多种语言的SDK,各SDK通过在上传对象时设置对象的Content-MD5值以开启一致性校验。如何计算并设置对象MD5值请前往OBS SDK参见各自开发指南的setObjectMetadata接口。

此处以使用OBS Java SDK上传Windows本地D盘一个名为text.txt的文本文件至mytestbucket为例,上传过程使用MD5值校验数据一致性的示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
// 计算并设置MD5值
ObjectMetadata metadata = new ObjectMetadata();
File file = new File("D:\\text.txt");
FileInputStream fis = new FileInputStream(file);
InputStream is = (InputStream)fis;
String contentMd5 = obsClient.base64Md5(is);
metadata.setContentMd5(contentMd5);
// 带MD5值上传文件
obsClient.putObject("mytestbucket", "text.txt", file, metadata);
  • 对象数据的MD5值必须经过Base64编码。
  • OBS服务端会将该MD5值与对象数据计算出的MD5值进行对比,如果不匹配则上传失败,返回HTTP 400错误。如果匹配,对象上传成功,返回HTTP 200状态码。
分享:

    相关文档

    相关产品