OBS服务两点使用小计{[不同带宽下数据传输量参考表],[上传请求中Content-MD5头域值设置详细说明]}

举报
shan0304 发表于 2019/06/29 14:33:19 2019/06/29
【摘要】 不同带宽下数据传输量参考表在向OBS上传数据和从OBS下载数据时候,特别是在大量数据搬迁的时候,需要对传输的时间和数据量进行评估。对此做了一个小表格,方便业务评估时候参考。很多在调用SDK或则API进行对象上传时候,需要携带Content-MD5头域进行 上传数据的一致性校验。此头域的值内容解释在API中比较模糊,这儿做进一步解释说明。如何计算Content-MD5?首先根据文件内容计算得出...

不同带宽下数据传输量参考表

在向OBS上传数据和从OBS下载数据时候,特别是在大量数据搬迁的时候,需要对传输的时间和数据量进行评估。对此做了一个小表格,方便业务评估时候参考。


image.png


很多在调用SDK或则API进行对象上传时候,需要携带Content-MD5头域进行 上传数据的一致性校验。此头域的值内容解释在API中比较模糊,这儿做进一步解释说明。

如何计算Content-MD5?

首先根据文件内容计算得出其128位二进制数组格式的MD5哈希值然后再对这个二进制数组进行base64编码(而不是对32位字符串编码)。例如,用Python计算'Hello OBS'的Content-MD5,代码为:

def str_to_base64(s):
    bb = base64.b64encode(s)
    return bb
contents='Hello OBS'
m2 = hashlib.md5()
m2.update(contents)
ContentMD5= str_to_base64(m2.digest())
# md5s=m2.hexdigest() #此方法为错误的方法使用
headers = PutObjectHeader()
headers.md5=ContentMD5
resp = obs_client.putContent('obs-training', 'objectkey', contents, metadata={'meta1':'value1', 'meta2':'value2'}, headers=headers)
if resp.status < 300:
    print('requestId:', resp.requestId)
else:
    print (resp.status)
    print('errorCode:', resp.errorCode)
    print('errorMessage:', resp.errorMessage)

以上代码在Windows CMD窗口调用python执行 内容如下,大家可以比较正确的Content-MD5和错误的Content-MD5头域值差异


>>> import hashlib,base64
>>> m2=hashlib.md5()
>>> m2.update('Hello OBS')
>>> base64.b64encode(m2.digest())
#正确的Content-MD5值
'cvKFqTUThYon+D2ntsI/AQ=='   
>>> base64.b64encode(m2.hexdigest())
#错误的Content-MD5值
'NzJmMjg1YTkzNTEzODU4YTI3ZjgzZGE3YjZjMjNmMDE='







   

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。