正在用OSS的api开发一个sdk,现在做到Delete Multiple Objects这里了。
第一次开发sdk,好多问题。之前遇到的问题我都自己解决了,现在Content-MD5这个字段为什么不和签名那里的算法一样呢?这个算法怎么搞。
2) 生成Content-MD5字段内容方法:首先将Delete Multiple Object请求内
容经过MD5加密后得到一个128位字节数组;再将该字节数组用base64算
法编码;最后得到的字符串即是Content-MD5字段内容。
签名那里都是直接调用md5计算,然后再进行base64编码,这里的话该怎么弄呢?
求教!!!!
已解决,解决方案:签名哪里是md5加密后的32位字符串,而这里是md5加密后的二进制数组,是对这个二进制进行base64编码而非对32位字符串编码。
-------------------------
另外说下,Python出了新的SDK
https://github.com/aliyun/aliyun-oss-python-sdk
支持了python3,可以试用下
-------------------------
再多说一句。
通过普通PUT请求上传的Object,OSS返回的ETAG定义是内容的MD5值,也就是32个十六进制数的字符串。和Content-MD5相比是没有经过base64编码的。
-------------------------
回楼上,我说的“Content-MD5是否合法”,是指不会验证HTTP头里的content-md5字段和上传数据的md5值是否一样。 在验证签名头的时候,是要判断提交的Content-MD5和签名中的Content-MD5是否一致。
举个例子:你可以将HTTP头中的Content-MD5和签名中的都设置成“xxxxx”,是可以通过签名验证的;但你上传内容的MD5值,肯定不是“xxxxx”。
-------------------------
-------------------------
-------------------------
-------------------------
-------------------------
经过测试和交谈得到的最新答案
head中的签名是CONTENT-MD5表示请求内容数据的MD5值
Delete Multiple Objects
MD5字段内容方法:首先将Delete Multiple Object请求内容经过MD5加密后得到一个128位字节数组;再将该字节数组用base64算法编码;最后得到的字符串即是Content-MD5字段内容。
这里是先请求到xml文件的md5值,在经过base54位算法得到字段内容。
示例:python代码信息:
def batch_delete_object(self, bucket, object_list_xml, headers=None, params=None):
'''
Delete the objects in object_list_xml
:type bucket: string
:param:
:type object_list_xml: string
:param:
:type headers: dict
:param: HTTP header
:type params: dict
:param: the parameters that put in the url address as query string
Returns:
HTTP Response
'''
if not headers:
headers = {}
if not params:
params = {}
method = 'POST'
object = ''
body = object_list_xml
headers['Content-Length'] = str(len(body))
params['delete'] = ''
base64md5 = base64.encodestring(md5.new(body).digest())
if base64md5[-1] == '\n':
base64md5 = base64md5[0:-1]
headers['Content-MD5'] = base64md5
return self.http_request(method, bucket, object, headers, body, params)
相关信息请您参考api和sdk文件。
谢谢。
-------------------------
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。